You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by sp...@apache.org on 2007/11/08 22:27:35 UTC
svn commit: r593328 [4/7] - in
/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking: ./
src/codegen/fonts/ src/documentation/ src/documentation/content/xdocs/
src/documentation/content/xdocs/dev/ src/documentation/content/xdocs/trunk/
src/java...
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFactory.java Thu Nov 8 13:27:19 2007
@@ -26,29 +26,27 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
+import java.util.ArrayList;
import java.util.BitSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
-import java.util.ArrayList;
-// Apache libs
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-
-// FOP
import org.apache.fop.fonts.CIDFont;
import org.apache.fop.fonts.CustomFont;
-import org.apache.fop.fonts.Typeface;
import org.apache.fop.fonts.FontDescriptor;
import org.apache.fop.fonts.FontMetrics;
import org.apache.fop.fonts.FontType;
import org.apache.fop.fonts.LazyFont;
import org.apache.fop.fonts.MultiByteFont;
+import org.apache.fop.fonts.Typeface;
import org.apache.fop.fonts.truetype.FontFileReader;
import org.apache.fop.fonts.truetype.TTFSubSetFile;
import org.apache.fop.fonts.type1.PFBData;
@@ -1270,7 +1268,7 @@
if (desc.getFontType() == FontType.TYPE0) {
// CID Font
- descriptor = new PDFCIDFontDescriptor(desc.getFontName(),
+ descriptor = new PDFCIDFontDescriptor(desc.getEmbedFontName(),
desc.getFontBBox(),
desc.getCapHeight(),
desc.getFlags(),
@@ -1278,7 +1276,7 @@
desc.getStemV(), null);
} else {
// Create normal FontDescriptor
- descriptor = new PDFFontDescriptor(desc.getFontName(),
+ descriptor = new PDFFontDescriptor(desc.getEmbedFontName(),
desc.getAscender(),
desc.getDescender(),
desc.getCapHeight(),
@@ -1333,7 +1331,7 @@
} catch (IOException ioe) {
log.error(
"Failed to write CIDSet [" + cidFont + "] "
- + cidFont.getFontName(), ioe);
+ + cidFont.getEmbedFontName(), ioe);
}
}
@@ -1422,7 +1420,7 @@
} catch (IOException ioe) {
log.error(
"Failed to embed font [" + desc + "] "
- + desc.getFontName(), ioe);
+ + desc.getEmbedFontName(), ioe);
return (PDFStream) null;
}
}
@@ -1471,7 +1469,7 @@
/**
* Create a PDFICCStream
- * @see PDFXObject
+ * @see PDFImageXObject
* @see org.apache.fop.image.JpegImage
* @see org.apache.fop.pdf.PDFDeviceColorSpace
* @return the new PDF ICC stream object
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilter.java Thu Nov 8 13:27:19 2007
@@ -92,7 +92,7 @@
*
* @return the decode params for the filter
*/
- public abstract String getDecodeParms();
+ public abstract PDFObject getDecodeParms();
/**
* Applies a filter to an OutputStream.
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFilterList.java Thu Nov 8 13:27:19 2007
@@ -48,6 +48,8 @@
private List filters = new java.util.ArrayList();
private boolean ignoreASCIIFilters = false;
+
+ private boolean disableAllFilters = false;
/**
* Default constructor.
@@ -68,6 +70,22 @@
}
/**
+ * Used to disable all filters.
+ * @param value true if all filters shall be disabled
+ */
+ public void setDisableAllFilters(boolean value) {
+ this.disableAllFilters = value;
+ }
+
+ /**
+ * Returns true if all filters are disabled.
+ * @return true if all filters are disabled
+ */
+ public boolean isDisableAllFilters() {
+ return this.disableAllFilters;
+ }
+
+ /**
* Indicates whether the filter list is already initialized.
* @return true if more there are filters present
*/
@@ -185,21 +203,7 @@
List names = new java.util.ArrayList();
List parms = new java.util.ArrayList();
- // run the filters
- int nonNullParams = 0;
- for (int count = 0; count < filters.size(); count++) {
- PDFFilter filter = (PDFFilter)filters.get(count);
- // place the names in our local vector in reverse order
- if (filter.getName().length() > 0) {
- names.add(0, filter.getName());
- if (filter.getDecodeParms() != null) {
- parms.add(0, filter.getDecodeParms());
- nonNullParams++;
- } else {
- parms.add(0, null);
- }
- }
- }
+ int nonNullParams = populateNamesAndParms(names, parms);
// now build up the filter entries for the dictionary
return buildFilterEntries(names)
@@ -209,6 +213,47 @@
}
+ /**
+ * Apply the filters to the data
+ * in the order given and add the /Filter and /DecodeParms
+ * entries to the stream dictionary. If the filters have already
+ * been applied to the data (either externally, or internally)
+ * then the dictionary entries added.
+ * @param dict the PDFDictionary to set the entries on
+ */
+ protected void putFilterDictEntries(PDFDictionary dict) {
+ if (filters != null && filters.size() > 0) {
+ List names = new java.util.ArrayList();
+ List parms = new java.util.ArrayList();
+
+ populateNamesAndParms(names, parms);
+
+ // now build up the filter entries for the dictionary
+ putFilterEntries(dict, names);
+ putDecodeParams(dict, parms);
+ }
+ }
+
+ private int populateNamesAndParms(List names, List parms) {
+ // run the filters
+ int nonNullParams = 0;
+ for (int count = 0; count < filters.size(); count++) {
+ PDFFilter filter = (PDFFilter)filters.get(count);
+ // place the names in our local vector in reverse order
+ if (filter.getName().length() > 0) {
+ names.add(0, filter.getName());
+ PDFObject param = filter.getDecodeParms();
+ if (param != null) {
+ parms.add(0, param);
+ nonNullParams++;
+ } else {
+ parms.add(0, null);
+ }
+ }
+ }
+ return nonNullParams;
+ }
+
private String buildFilterEntries(List names) {
int filterCount = 0;
StringBuffer sb = new StringBuffer(64);
@@ -231,6 +276,23 @@
}
}
+ private void putFilterEntries(PDFDictionary dict, List names) {
+ PDFArray array = new PDFArray();
+ for (int i = 0, c = names.size(); i < c; i++) {
+ final String name = (String)names.get(i);
+ if (name.length() > 0) {
+ array.add(new PDFName(name));
+ }
+ }
+ if (array.length() > 0) {
+ if (array.length() > 1) {
+ dict.put("Filter", array);
+ } else {
+ dict.put("Filter", array.get(0));
+ }
+ }
+ }
+
private String buildDecodeParms(List parms) {
StringBuffer sb = new StringBuffer();
boolean needParmsEntry = false;
@@ -259,6 +321,26 @@
}
}
+ private void putDecodeParams(PDFDictionary dict, List parms) {
+ boolean needParmsEntry = false;
+ PDFArray array = new PDFArray();
+ for (int i = 0, c = parms.size(); i < c; i++) {
+ Object obj = parms.get(i);
+ if (obj != null) {
+ array.add(obj);
+ needParmsEntry = true;
+ } else {
+ array.add(null);
+ }
+ }
+ if (array.length() > 0 & needParmsEntry) {
+ if (array.length() > 1) {
+ dict.put("DecodeParams", array);
+ } else {
+ dict.put("DecodeParams", array.get(0));
+ }
+ }
+ }
/**
* Applies all registered filters as necessary. The method returns an
@@ -269,7 +351,7 @@
*/
public OutputStream applyFilters(OutputStream stream) throws IOException {
OutputStream out = stream;
- if (filters != null) {
+ if (filters != null && !isDisableAllFilters()) {
for (int count = filters.size() - 1; count >= 0; count--) {
PDFFilter filter = (PDFFilter)filters.get(count);
out = filter.applyFilter(out);
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFFormXObject.java Thu Nov 8 13:27:19 2007
@@ -20,6 +20,8 @@
package org.apache.fop.pdf;
// Java
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.io.OutputStream;
@@ -30,79 +32,149 @@
* dictionary but a stream of image data.
*/
public class PDFFormXObject extends PDFXObject {
+
private PDFStream contents;
- private String resRef;
+ private PDFReference resRef;
/**
* create a FormXObject with the given number and name and load the
* image in the object
*
* @param xnumber the pdf object X number
- * @param cont the pdf stream contents
- * @param ref the resource PDF reference
+ * @param contents the form's contents
+ * @param resources the resource PDF reference
*/
- public PDFFormXObject(int xnumber, PDFStream cont, String ref) {
- super(xnumber, null);
- contents = cont;
- resRef = ref;
+ public PDFFormXObject(int xnumber, PDFStream contents, PDFReference resources) {
+ super();
+ put("Name", new PDFName("Form" + xnumber));
+ this.resRef = resources;
+ this.contents = contents;
+
+ put("Type", new PDFName("XObject"));
+ put("Subtype", new PDFName("Form"));
+ put("FormType", new Integer(1));
+ setMatrix(new AffineTransform());
}
/**
- * Output the form stream as PDF.
- * This sets up the form XObject dictionary and adds the content
- * data stream.
- *
- * @param stream the output stream to write the data
- * @throws IOException if there is an error writing the data
- * @return the length of the data written
+ * Sets the bounding box of the Form XObject.
+ * @param bbox the bounding box
*/
- protected int output(OutputStream stream) throws IOException {
- int length = 0;
-
- String dictEntries = getFilterList().buildFilterDictEntries();
-
- final StreamCache encodedStream = encodeStream();
-
- StringBuffer sb = new StringBuffer(128);
- sb.append(getObjectID());
- sb.append("<</Type /XObject\n");
- sb.append("/Subtype /Form\n");
- sb.append("/FormType 1\n");
- sb.append("/BBox [0 0 1000 1000]\n");
- sb.append("/Matrix [1 0 0 1 0 0]\n");
- sb.append("/Resources " + resRef + "\n");
- sb.append("/Length " + (encodedStream.getSize() + 1) + "\n");
-
- sb.append(dictEntries);
- sb.append(">>\n");
-
- // push the pdf dictionary on the writer
- byte[] pdfBytes = encode(sb.toString());
- stream.write(pdfBytes);
- length += pdfBytes.length;
-
- //Send encoded stream to target OutputStream
- length += outputStreamData(encodedStream, stream);
- encodedStream.clear(); //Encoded stream can now be discarded
-
- pdfBytes = encode("endobj\n");
- stream.write(pdfBytes);
- length += pdfBytes.length;
-
- // let it gc
- // this object is retained as a reference to inserting
- // the same image but the image data is no longer needed
- contents = null;
- return length;
+ public void setBBox(Rectangle2D bbox) {
+ PDFArray array = (PDFArray)get("BBox");
+ if (array == null) {
+ array = new PDFArray();
+ array.add(bbox.getX());
+ array.add(bbox.getY());
+ array.add(bbox.getWidth());
+ array.add(bbox.getHeight());
+ put("BBox", array);
+ } else {
+ array.set(0, bbox.getX());
+ array.set(1, bbox.getY());
+ array.set(2, bbox.getWidth());
+ array.set(3, bbox.getHeight());
+ }
}
/**
- * {@inheritDoc}
+ * Returns the bounding box.
+ * @return the BBox value
*/
+ public Rectangle2D getBBox() {
+ PDFArray array = (PDFArray)get("BBox");
+ if (array != null) {
+ Rectangle2D rect = new Rectangle2D.Double();
+ double x = ((Number)array.get(0)).doubleValue();
+ double y = ((Number)array.get(1)).doubleValue();
+ double w = ((Number)array.get(2)).doubleValue();
+ double h = ((Number)array.get(3)).doubleValue();
+ rect.setFrame(x, y, w, h);
+ return rect;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Sets the Matrix value
+ * @param at the AffineTransform defining the transformation matrix
+ */
+ public void setMatrix(AffineTransform at) {
+ PDFArray array = (PDFArray)get("Matrix");
+ double[] m = new double[6];
+ at.getMatrix(m);
+ if (array == null) {
+ array = new PDFArray();
+ array.add(m[0]);
+ array.add(m[1]);
+ array.add(m[2]);
+ array.add(m[3]);
+ array.add(m[4]);
+ array.add(m[5]);
+ put("Matrix", array);
+ } else {
+ array.set(0, m[0]);
+ array.set(1, m[1]);
+ array.set(2, m[2]);
+ array.set(3, m[3]);
+ array.set(4, m[4]);
+ array.set(5, m[5]);
+ }
+ }
+
+ /**
+ * Returns the Matrix value.
+ * @return the Matrix
+ */
+ public AffineTransform getMatrix() {
+ PDFArray array = (PDFArray)get("Matrix");
+ if (array != null) {
+ AffineTransform at = new AffineTransform();
+ double m00 = ((Number)array.get(0)).doubleValue();
+ double m10 = ((Number)array.get(1)).doubleValue();
+ double m01 = ((Number)array.get(2)).doubleValue();
+ double m11 = ((Number)array.get(3)).doubleValue();
+ double m02 = ((Number)array.get(4)).doubleValue();
+ double m12 = ((Number)array.get(5)).doubleValue();
+ at.setTransform(m00, m10, m01, m11, m02, m12);
+ return at;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Used to set the contents of the PDF stream.
+ * @param data the contents as a byte array
+ * @throws IOException in case of an I/O problem
+ */
+ public void setData(byte[] data) throws IOException {
+ this.contents.setData(data);
+ }
+
+ /** {@inheritDoc} */
protected void outputRawStreamData(OutputStream out) throws IOException {
contents.outputRawStreamData(out);
}
+ /** {@inheritDoc} */
+ protected int output(OutputStream stream) throws IOException {
+ final int len = super.output(stream);
+
+ //Now that the data has been written, it can be discarded.
+ this.contents = null;
+ return len;
+ }
+
+ /** {@inheritDoc} */
+ protected void populateStreamDict(Object lengthEntry) {
+ if (get("Matrix") == null) {
+ put("Matrix", new PDFArray(new int[] {1, 0, 0, 1, 0, 0}));
+ }
+ put("Resources", resRef);
+ super.populateStreamDict(lengthEntry);
+ }
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFICCStream.java Thu Nov 8 13:27:19 2007
@@ -73,24 +73,13 @@
cp.write(out);
}
- /**
- * {@inheritDoc}
- */
- protected String buildStreamDict(String lengthEntry) {
- final String filterEntry = getFilterList().buildFilterDictEntries();
- final StringBuffer sb = new StringBuffer(128);
- sb.append(getObjectID());
- sb.append("<< ");
- sb.append("/N " + cp.getNumComponents());
-
+ /** {@inheritDoc} */
+ protected void populateStreamDict(Object lengthEntry) {
+ put("N", cp.getNumComponents());
if (pdfColorSpace != null) {
- sb.append("\n/Alternate /" + pdfColorSpace.getName() + " ");
+ put("Alternate", new PDFName(pdfColorSpace.getName()));
}
-
- sb.append("\n/Length " + lengthEntry);
- sb.append("\n" + filterEntry);
- sb.append("\n>>\n");
- return sb.toString();
+ super.populateStreamDict(lengthEntry);
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFImage.java Thu Nov 8 13:27:19 2007
@@ -109,6 +109,8 @@
* @return the PDF reference for a soft mask image
*/
String getSoftMask();
+
+ PDFReference getSoftMaskReference();
/** @return true for CMYK images generated by Adobe Photoshop */
boolean isInverted();
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFMetadata.java Thu Nov 8 13:27:19 2007
@@ -101,24 +101,18 @@
}
/** {@inheritDoc} */
- protected String buildStreamDict(String lengthEntry) {
+ protected void populateStreamDict(Object lengthEntry) {
final String filterEntry = getFilterList().buildFilterDictEntries();
if (getDocumentSafely().getProfile().getPDFAMode().isPDFA1LevelB()
&& filterEntry != null && filterEntry.length() > 0) {
throw new PDFConformanceException(
"The Filter key is prohibited when PDF/A-1 is active");
}
- final StringBuffer sb = new StringBuffer(128);
- sb.append(getObjectID());
- sb.append("<< ");
- sb.append("/Type /Metadata");
- sb.append("\n/Subtype /XML");
- sb.append("\n/Length " + lengthEntry);
- sb.append("\n" + filterEntry);
- sb.append("\n>>\n");
- return sb.toString();
+ put("Type", new PDFName("Metadata"));
+ put("Subtype", new PDFName("XML"));
+ super.populateStreamDict(lengthEntry);
}
-
+
/**
* Creates an XMP document based on the settings on the PDF Document.
* @param pdfDoc the PDF Document
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFNumber.java Thu Nov 8 13:27:19 2007
@@ -111,9 +111,13 @@
"The number of this PDFNumber must not be empty");
}
StringBuffer sb = new StringBuffer(64);
- sb.append(getObjectID());
+ if (hasObjectNumber()) {
+ sb.append(getObjectID());
+ }
sb.append(getNumber().toString());
- sb.append("\nendobj\n");
+ if (hasObjectNumber()) {
+ sb.append("\nendobj\n");
+ }
return sb.toString();
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFObject.java Thu Nov 8 13:27:19 2007
@@ -251,9 +251,17 @@
* @param sb the StringBuffer to write to
*/
protected void formatObject(Object obj, StringBuffer sb) {
- if (obj instanceof PDFWritable) {
+ if (obj == null) {
+ sb.append("null");
+ } else if (obj instanceof PDFWritable) {
sb.append(((PDFWritable)obj).toInlinePDFString());
} else if (obj instanceof Number) {
+ if (obj instanceof Double || obj instanceof Float) {
+ sb.append(PDFNumber.doubleOut(((Number)obj).doubleValue()));
+ } else {
+ sb.append(obj);
+ }
+ } else if (obj instanceof Boolean) {
sb.append(obj);
} else {
sb.append("(").append(obj).append(")");
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFReference.java Thu Nov 8 13:27:19 2007
@@ -42,6 +42,14 @@
this.indirectReference = obj.referencePDF();
this.objReference = new SoftReference(obj);
}
+
+ /**
+ * Creates a new PDF reference, but without a reference to the original object.
+ * @param ref an object reference
+ */
+ public PDFReference(String ref) {
+ this.indirectReference = ref;
+ }
/**
* Returns the PDF object
@@ -62,6 +70,11 @@
/** {@inheritDoc} */
public String toInlinePDFString() {
return this.indirectReference;
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ return toInlinePDFString();
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFResources.java Thu Nov 8 13:27:19 2007
@@ -19,17 +19,16 @@
package org.apache.fop.pdf;
-import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.fonts.Typeface;
-import org.apache.fop.fonts.FontDescriptor;
-import org.apache.fop.util.ColorProfileUtil;
-
-// Java
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
+
+import org.apache.fop.fonts.FontDescriptor;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.fonts.Typeface;
+import org.apache.fop.util.ColorProfileUtil;
/**
* class representing a /Resources object.
@@ -97,17 +96,22 @@
* @param fontInfo font info object to get font information from
*/
public void addFonts(PDFDocument doc, FontInfo fontInfo) {
- Map fonts = fontInfo.getUsedFonts();
- Iterator e = fonts.keySet().iterator();
+ Map usedFonts = fontInfo.getUsedFonts();
+ Iterator e = usedFonts.keySet().iterator();
while (e.hasNext()) {
String f = (String)e.next();
- Typeface font = (Typeface)fonts.get(f);
- FontDescriptor desc = null;
- if (font instanceof FontDescriptor) {
- desc = (FontDescriptor)font;
+ Typeface font = (Typeface)usedFonts.get(f);
+
+ //Check if the font actually had any mapping operations. If not, it is an indication
+ //that it has never actually been used and therefore doesn't have to be embedded.
+ if (font.hadMappingOperations()) {
+ FontDescriptor desc = null;
+ if (font instanceof FontDescriptor) {
+ desc = (FontDescriptor)font;
+ }
+ addFont(doc.getFactory().makeFont(
+ f, font.getEmbedFontName(), font.getEncoding(), font, desc));
}
- addFont(doc.getFactory().makeFont(
- f, font.getFontName(), font.getEncoding(), font, desc));
}
}
@@ -240,7 +244,7 @@
p = p.append("/XObject <<\n");
for (Iterator iter = xObjects.iterator(); iter.hasNext();) {
PDFXObject xobj = (PDFXObject)iter.next();
- p = p.append(" /Im" + xobj.getXNumber() + " "
+ p = p.append(" " + xobj.getName() + " "
+ xobj.referencePDF()
+ "\n");
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFStream.java Thu Nov 8 13:27:19 2007
@@ -64,7 +64,17 @@
}
}
-
+
+ /**
+ * Returns an OutputStream that can be used to write to the buffer which is used
+ * to build up the PDF stream.
+ * @return the OutputStream
+ * @throws IOException In case of an I/O problem
+ */
+ public OutputStream getBufferOutputStream() throws IOException {
+ return this.data.getOutputStream();
+ }
+
/**
* Used to set the contents of the PDF stream.
* @param data the contents as a byte array
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFT1Stream.java Thu Nov 8 13:27:19 2007
@@ -61,18 +61,12 @@
return length;
}
- /**
- * {@inheritDoc}
- */
- protected String buildStreamDict(String lengthEntry) {
- final String filterEntry = getFilterList().buildFilterDictEntries();
- return (getObjectID()
- + "<< /Length " + lengthEntry
- + " /Length1 " + pfb.getLength1()
- + " /Length2 " + pfb.getLength2()
- + " /Length3 " + pfb.getLength3()
- + "\n" + filterEntry
- + "\n>>\n");
+ /** {@inheritDoc} */
+ protected void populateStreamDict(Object lengthEntry) {
+ super.populateStreamDict(lengthEntry);
+ put("Length1", new Integer(pfb.getLength1()));
+ put("Length2", new Integer(pfb.getLength2()));
+ put("Length3", new Integer(pfb.getLength3()));
}
/**
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFTTFStream.java Thu Nov 8 13:27:19 2007
@@ -51,18 +51,12 @@
return length;
}
- /**
- * {@inheritDoc}
- */
- protected String buildStreamDict(String lengthEntry) {
- final String filterEntry = getFilterList().buildFilterDictEntries();
- return (getObjectID()
- + "<< /Length " + lengthEntry
- + " /Length1 " + origLength
- + "\n" + filterEntry
- + "\n>>\n");
+ /** {@inheritDoc} */
+ protected void populateStreamDict(Object lengthEntry) {
+ put("Length1", origLength);
+ super.populateStreamDict(lengthEntry);
}
-
+
/**
* Sets the TrueType font data.
* @param data the font payload
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/pdf/PDFXObject.java Thu Nov 8 13:27:19 2007
@@ -21,13 +21,9 @@
// Java
import java.io.IOException;
-import java.io.OutputStream;
-
-/* modified by JKT to integrate with 0.12.0 */
-/* modified by Eric SCHAEFFER to integrate with 0.13.0 */
/**
- * PDF XObject
+ * Abstract base class of PDF XObjects.
*
* A derivative of the PDF Object, is a PDF Stream that has not only a
* dictionary but a stream of image data.
@@ -36,170 +32,32 @@
* This is used as a reference for inserting the same image in the
* document in another place.
*/
-public class PDFXObject extends AbstractPDFStream {
+public abstract class PDFXObject extends AbstractPDFStream {
- private PDFImage pdfimage;
- private int xnum;
-
/**
- * create an XObject with the given number and name and load the
- * image in the object
- *
- * @param xnumber the pdf object X number
- * @param img the pdf image that contains the image data
+ * Create an XObject with the given number.
*/
- public PDFXObject(int xnumber, PDFImage img) {
+ public PDFXObject() {
super();
- this.xnum = xnumber;
- pdfimage = img;
- }
-
- /**
- * Get the xnumber for this pdf object.
- *
- * @return the PDF XObject number
- */
- public int getXNumber() {
- return this.xnum;
- }
-
- /**
- * Output the image as PDF.
- * This sets up the image dictionary and adds the image data stream.
- *
- * @param stream the output stream to write the data
- * @throws IOException if there is an error writing the data
- * @return the length of the data written
- */
- protected int output(OutputStream stream) throws IOException {
- int length = super.output(stream);
-
- // let it gc
- // this object is retained as a reference to inserting
- // the same image but the image data is no longer needed
- pdfimage = null;
- return length;
}
/**
- * {@inheritDoc}
+ * Returns the XObject's name.
+ * @return the name of the XObject
*/
- protected String buildStreamDict(String lengthEntry) {
- String dictEntries = getFilterList().buildFilterDictEntries();
- if (pdfimage.isPS()) {
- return buildDictionaryFromPS(lengthEntry, dictEntries);
- } else {
- return buildDictionaryFromImage(lengthEntry, dictEntries);
- }
+ public PDFName getName() {
+ return (PDFName)get("Name");
}
- private String buildDictionaryFromPS(String lengthEntry,
- String dictEntries) {
- getDocumentSafely().getProfile().verifyPSXObjectsAllowed();
- StringBuffer sb = new StringBuffer(128);
- sb.append(getObjectID());
- sb.append("<</Type /XObject\n");
- sb.append("/Subtype /PS\n");
- sb.append("/Length " + lengthEntry);
-
- sb.append(dictEntries);
- sb.append("\n>>\n");
- return sb.toString();
- }
-
- private String buildDictionaryFromImage(String lengthEntry,
- String dictEntries) {
- StringBuffer sb = new StringBuffer(128);
- sb.append(getObjectID());
- sb.append("<</Type /XObject\n");
- sb.append("/Subtype /Image\n");
- sb.append("/Name /Im" + xnum + "\n");
- sb.append("/Length " + lengthEntry + "\n");
- sb.append("/Width " + pdfimage.getWidth() + "\n");
- sb.append("/Height " + pdfimage.getHeight() + "\n");
- sb.append("/BitsPerComponent " + pdfimage.getBitsPerPixel() + "\n");
-
- PDFICCStream pdfICCStream = pdfimage.getICCStream();
- if (pdfICCStream != null) {
- sb.append("/ColorSpace [/ICCBased "
- + pdfICCStream.referencePDF() + "]\n");
- } else {
- PDFDeviceColorSpace cs = pdfimage.getColorSpace();
- sb.append("/ColorSpace /" + cs.getName()
- + "\n");
- }
-
- if (pdfimage.isInverted()) {
- /* PhotoShop generates CMYK values that's inverse,
- * this will invert the values - too bad if it's not
- * a PhotoShop image...
- */
- if (pdfimage.getColorSpace().getColorSpace() == PDFDeviceColorSpace.DEVICE_CMYK) {
- sb.append("/Decode [ 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 ]\n");
- } else if (pdfimage.getColorSpace().getColorSpace() == PDFDeviceColorSpace.DEVICE_RGB) {
- sb.append("/Decode [ 1.0 0.0 1.0 0.0 1.0 0.0 ]\n");
- } else if (pdfimage.getColorSpace().getColorSpace() == PDFDeviceColorSpace.DEVICE_GRAY) {
- sb.append("/Decode [ 1.0 0.0 ]\n");
- }
- }
-
- if (pdfimage.isTransparent()) {
- PDFColor transp = pdfimage.getTransparentColor();
- sb.append("/Mask ["
- + transp.red255() + " "
- + transp.red255() + " "
- + transp.green255() + " "
- + transp.green255() + " "
- + transp.blue255() + " "
- + transp.blue255() + "]\n");
- }
- String ref = pdfimage.getSoftMask();
- if (ref != null) {
- sb.append("/SMask " + ref + "\n");
- }
-
- sb.append(dictEntries);
- sb.append("\n>>\n");
- return sb.toString();
+ /** {@inheritDoc} */
+ protected void populateStreamDict(Object lengthEntry) {
+ put("Type", new PDFName("XObject"));
+ super.populateStreamDict(lengthEntry);
}
- /**
- * {@inheritDoc}
- */
- protected void outputRawStreamData(OutputStream out) throws IOException {
- pdfimage.outputContents(out);
- }
-
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
protected int getSizeHint() throws IOException {
return 0;
}
-
- /**
- * {@inheritDoc}
- */
- protected void prepareImplicitFilters() {
- PDFFilter pdfFilter = pdfimage.getPDFFilter();
- if (pdfFilter != null) {
- getFilterList().ensureFilterInPlace(pdfFilter);
- }
- }
-
- /**
- * This sets up the default filters for XObjects. It uses the PDFImage
- * instance to determine what default filters to apply.
- * {@inheritDoc}
- */
- protected void setupFilterList() {
- if (!getFilterList().isInitialized()) {
- getFilterList().addDefaultFilters(
- getDocumentSafely().getFilterMap(),
- pdfimage.getFilterHint());
- }
- super.setupFilterList();
- }
-
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/PrintRendererConfigurator.java Thu Nov 8 13:27:19 2007
@@ -21,6 +21,7 @@
import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
@@ -53,9 +54,6 @@
public class PrintRendererConfigurator extends AbstractRendererConfigurator
implements RendererConfigurator {
- /** have we already autodetected system fonts? */
- private static boolean autodetectedFonts = false;
-
/** logger instance */
protected static Log log = LogFactory.getLog(PrintRendererConfigurator.class);
@@ -126,7 +124,7 @@
// native o/s search (autodetect) configuration
boolean autodetectFonts = (fonts.getChild("auto-detect", false) != null);
- if (!autodetectedFonts && autodetectFonts) {
+ if (autodetectFonts) {
// search in font base if it is defined and
// is a directory but don't recurse
FontFileFinder fontFileFinder = new FontFileFinder();
@@ -158,7 +156,6 @@
} catch (IOException e) {
LogUtil.handleException(log, e, strict);
}
- autodetectedFonts = true;
}
// directory (multiple font) configuration
@@ -216,10 +213,10 @@
private static void addFontInfoListFromFileList(
List fontFileList, List fontInfoList, FontResolver resolver, FontCache fontCache) {
for (Iterator iter = fontFileList.iterator(); iter.hasNext();) {
- File fontFile = (File)iter.next();
+ URL fontUrl = (URL)iter.next();
// parse font to ascertain font info
FontInfoFinder finder = new FontInfoFinder();
- EmbedFontInfo fontInfo = finder.find(fontFile, resolver, fontCache);
+ EmbedFontInfo fontInfo = finder.find(fontUrl, resolver, fontCache);
if (fontInfo != null) {
fontInfoList.add(fontInfo);
}
@@ -274,9 +271,17 @@
// if not strict try to determine font info from the embed/metrics url
File fontFile = CachedFontInfo.getFileFromUrls(new String[] {embedUrl, metricsUrl});
+ URL fontUrl;
+ try {
+ fontUrl = fontFile.toURI().toURL();
+ } catch (MalformedURLException e) {
+ // Should never happen
+ log.debug("Malformed Url: " + e.getMessage());
+ return null;
+ }
if (fontFile != null) {
FontInfoFinder finder = new FontInfoFinder();
- return finder.find(fontFile, fontResolver, fontCache);
+ return finder.find(fontUrl, fontResolver, fontCache);
} else {
return null;
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/AFPFont.java Thu Nov 8 13:27:19 2007
@@ -19,35 +19,51 @@
package org.apache.fop.render.afp.fonts;
import java.util.Map;
+import java.util.Set;
+
import org.apache.fop.fonts.FontType;
import org.apache.fop.fonts.Typeface;
/**
- * All implemenations of AFP fonts should extend this base class,
+ * All implementations of AFP fonts should extend this base class,
* the object implements the FontMetrics information.
* <p/>
*/
public abstract class AFPFont extends Typeface {
/** The font name */
- protected String _name;
+ protected String name;
/**
* Constructor for the base font requires the name.
* @param name the name of the font
*/
public AFPFont(String name) {
-
- _name = name;
+ this.name = name;
}
- /**
- * @return the name of the font.
- */
+ /** {@inheritDoc} */
public String getFontName() {
- return _name;
+ return this.name;
+ }
+
+ /** {@inheritDoc} */
+ public String getEmbedFontName() {
+ return this.name;
+ }
+
+ /** {@inheritDoc} */
+ public String getFullName() {
+ return getFontName();
+ }
+
+ /** {@inheritDoc} */
+ public Set getFamilyNames() {
+ Set s = new java.util.HashSet();
+ s.add(this.name);
+ return s;
}
/**
@@ -59,7 +75,7 @@
}
/**
- * Indicates if the font has kering information.
+ * Indicates if the font has kerning information.
* @return True, if kerning is available.
*/
public boolean hasKerningInfo() {
@@ -84,7 +100,7 @@
/**
* Determines whether this font contains a particular character/glyph.
* @param c character to check
- * @return True if the character is supported, Falso otherwise
+ * @return True if the character is supported, False otherwise
*/
public boolean hasChar(char c) {
return true;
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/afp/fonts/RasterFont.java Thu Nov 8 13:27:19 2007
@@ -92,13 +92,13 @@
}
if (csm != null) {
_characterSets.put(size + "mpt", csm);
- String msg = "No " + (size / 1000) + "pt font " + _name
+ String msg = "No " + (size / 1000) + "pt font " + getFontName()
+ " found, substituted with " + pointsize + "pt font";
log.warn(msg);
}
}
if (csm == null) {
- String msg = "No font found for font " + _name
+ String msg = "No font found for font " + getFontName()
+ " with point size " + pointsize;
log.error(msg);
throw new FontRuntimeException(msg);
@@ -117,7 +117,7 @@
CharacterSet csm = (CharacterSet) i.next();
return csm.getFirstChar();
} else {
- String msg = "getFirstChar() - No character set found for font:" + _name;
+ String msg = "getFirstChar() - No character set found for font:" + getFontName();
log.error(msg);
throw new FontRuntimeException(msg);
}
@@ -134,7 +134,7 @@
CharacterSet csm = (CharacterSet) i.next();
return csm.getLastChar();
} else {
- String msg = "getLastChar() - No character set found for font:" + _name;
+ String msg = "getLastChar() - No character set found for font:" + getFontName();
log.error(msg);
throw new FontRuntimeException(msg);
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/bitmap/PNGRendererMaker.java Thu Nov 8 13:27:19 2007
@@ -23,6 +23,8 @@
import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
+import org.apache.fop.render.java2d.Java2DRendererConfigurator;
/**
* RendererMaker for the PNG Renderer.
@@ -35,6 +37,11 @@
/** {@inheritDoc} */
public Renderer makeRenderer(FOUserAgent ua) {
return new PNGRenderer();
+ }
+
+ /** {@inheritDoc} */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new Java2DRendererConfigurator(userAgent);
}
/** {@inheritDoc} */
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontMetricsMapper.java Thu Nov 8 13:27:19 2007
@@ -22,8 +22,8 @@
// Java
import java.awt.Graphics2D;
import java.util.Map;
+import java.util.Set;
-// FOP
import org.apache.fop.fonts.FontMetrics;
import org.apache.fop.fonts.FontType;
import org.apache.fop.fonts.Typeface;
@@ -72,11 +72,26 @@
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public String getFontName() {
return family;
+ }
+
+ /** {@inheritDoc} */
+ public String getEmbedFontName() {
+ return getFontName();
+ }
+
+ /** {@inheritDoc} */
+ public String getFullName() {
+ return getFontName();
+ }
+
+ /** {@inheritDoc} */
+ public Set getFamilyNames() {
+ Set s = new java.util.HashSet();
+ s.add(this.family);
+ return s;
}
/**
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/java2d/FontSetup.java Thu Nov 8 13:27:19 2007
@@ -20,16 +20,16 @@
package org.apache.fop.render.java2d;
// FOP
+import java.awt.Graphics2D;
+import java.awt.GraphicsEnvironment;
+import java.util.Set;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.Font;
+import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontTriplet;
-
-// Java
-import java.awt.Graphics2D;
-import java.awt.GraphicsEnvironment;
-import java.util.Set;
+import org.apache.fop.fonts.FontUtil;
/**
* Sets up the Java2D/AWT fonts. It is similar to
@@ -214,54 +214,66 @@
int startNumber) {
int num = startNumber;
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
- String[] allFontFamilies = env.getAvailableFontFamilyNames();
- for (int i = 0; i < allFontFamilies.length; i++) {
- String family = allFontFamilies[i];
- if (HARDCODED_FONT_NAMES.contains(family)) {
+
+ java.awt.Font[] fonts = env.getAllFonts();
+ for (int i = 0; i < fonts.length; i++) {
+ java.awt.Font f = fonts[i];
+ if (HARDCODED_FONT_NAMES.contains(f.getFontName())) {
continue; //skip
}
-
- if (log.isDebugEnabled()) {
- log.debug("Registering: " + family);
+
+ if (log.isTraceEnabled()) {
+ log.trace("AWT Font: " + f.getFontName()
+ + ", family: " + f.getFamily()
+ + ", PS: " + f.getPSName()
+ + ", Name: " + f.getName()
+ + ", Angle: " + f.getItalicAngle()
+ + ", Style: " + f.getStyle());
}
- //Java does not give info about what variants of a font is actually supported, so
- //we simply register all the basic variants. If we use GraphicsEnvironment.getAllFonts()
- //we don't get reliable info whether a font is italic or bold or both.
- int fontStyle;
- fontStyle = java.awt.Font.PLAIN;
- registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
- num++;
+ String searchName = FontUtil.stripWhiteSpace(f.getFontName()).toLowerCase();
+ String guessedStyle = FontUtil.guessStyle(searchName);
+ int guessedWeight = FontUtil.guessWeight(searchName);
- fontStyle = java.awt.Font.ITALIC;
- registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
num++;
+ String fontKey = "F" + num;
+ int style = convertToAWTFontStyle(guessedStyle, guessedWeight);
+ addFontMetricsMapper(fontInfo, f.getFontName(), fontKey, graphics, style);
+
+ //Register appropriate font triplets matching the font. Two different strategies:
+ //Example: "Arial Bold", normal, normal
+ addFontTriplet(fontInfo, f.getFontName(),
+ Font.STYLE_NORMAL, Font.WEIGHT_NORMAL, fontKey);
+ if (!f.getFontName().equals(f.getFamily())) {
+ //Example: "Arial", bold, normal
+ addFontTriplet(fontInfo, f.getFamily(),
+ guessedStyle, guessedWeight, fontKey);
+ }
+ }
- fontStyle = java.awt.Font.BOLD;
- registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
- num++;
+ }
- fontStyle = java.awt.Font.BOLD | java.awt.Font.ITALIC;
- registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics);
- num++;
- }
+ private static void addFontTriplet(FontInfo fontInfo, String fontName, String fontStyle,
+ int fontWeight, String fontKey) {
+ FontTriplet triplet = FontInfo.createFontKey(fontName, fontStyle, fontWeight);
+ fontInfo.addFontProperties(fontKey, triplet);
}
- private static void registerFontTriplet(FontInfo fontInfo, String family, int fontStyle,
- String fontKey, Graphics2D graphics) {
- FontMetricsMapper metric = new FontMetricsMapper(family, fontStyle, graphics);
+ private static void addFontMetricsMapper(FontInfo fontInfo, String family, String fontKey,
+ Graphics2D graphics, int style) {
+ FontMetricsMapper metric = new FontMetricsMapper(family, style, graphics);
fontInfo.addMetrics(fontKey, metric);
-
- int weight = Font.WEIGHT_NORMAL;
- if ((fontStyle & java.awt.Font.BOLD) != 0) {
- weight = Font.WEIGHT_BOLD;
+ }
+
+ private static int convertToAWTFontStyle(String fontStyle, int fontWeight) {
+ int style = java.awt.Font.PLAIN;
+ if (fontWeight >= Font.WEIGHT_BOLD) {
+ style |= java.awt.Font.BOLD;
}
- String style = "normal";
- if ((fontStyle & java.awt.Font.ITALIC) != 0) {
- style = "italic";
+ if (!"normal".equals(fontStyle)) {
+ style |= java.awt.Font.ITALIC;
}
- FontTriplet triplet = FontInfo.createFontKey(family, style, weight);
- fontInfo.addFontProperties(fontKey, triplet);
+ return style;
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/FopPDFImage.java Thu Nov 8 13:27:19 2007
@@ -18,32 +18,32 @@
/* $Id$ */
package org.apache.fop.render.pdf;
+import java.awt.color.ColorSpace;
+import java.awt.color.ICC_Profile;
+import java.io.IOException;
+import java.io.OutputStream;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.fop.image.EPSImage;
+import org.apache.fop.image.FopImage;
+import org.apache.fop.image.TIFFImage;
+import org.apache.fop.pdf.BitmapImage;
+import org.apache.fop.pdf.CCFFilter;
+import org.apache.fop.pdf.DCTFilter;
+import org.apache.fop.pdf.PDFColor;
import org.apache.fop.pdf.PDFConformanceException;
+import org.apache.fop.pdf.PDFDeviceColorSpace;
+import org.apache.fop.pdf.PDFDictionary;
+import org.apache.fop.pdf.PDFDocument;
+import org.apache.fop.pdf.PDFFilter;
import org.apache.fop.pdf.PDFFilterList;
import org.apache.fop.pdf.PDFICCBasedColorSpace;
-import org.apache.fop.pdf.PDFImage;
-import org.apache.fop.pdf.PDFFilter;
import org.apache.fop.pdf.PDFICCStream;
-import org.apache.fop.pdf.PDFColor;
-import org.apache.fop.pdf.PDFDocument;
-import org.apache.fop.pdf.DCTFilter;
-import org.apache.fop.pdf.CCFFilter;
-import org.apache.fop.pdf.PDFDeviceColorSpace;
-import org.apache.fop.pdf.PDFXObject;
-import org.apache.fop.pdf.BitmapImage;
+import org.apache.fop.pdf.PDFImage;
+import org.apache.fop.pdf.PDFReference;
import org.apache.fop.util.ColorProfileUtil;
-import org.apache.fop.image.FopImage;
-import org.apache.fop.image.EPSImage;
-import org.apache.fop.image.TIFFImage;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_Profile;
-
/**
* PDFImage implementation for the PDF renderer.
*/
@@ -56,7 +56,7 @@
private PDFICCStream pdfICCStream = null;
private PDFFilter pdfFilter = null;
private String maskRef;
- private String softMaskRef;
+ private PDFReference softMask;
private boolean isPS = false;
private boolean isCCF = false;
private boolean isDCT = false;
@@ -104,8 +104,10 @@
} else if (comp == 4) {
pdfFilter = new CCFFilter();
pdfFilter.setApplied(true);
- ((CCFFilter)pdfFilter).setDecodeParms("<< /K -1 /Columns "
- + tiffImage.getWidth() + " >>");
+ PDFDictionary dict = new PDFDictionary();
+ dict.put("K", -1);
+ dict.put("Columns", tiffImage.getWidth());
+ ((CCFFilter)pdfFilter).setDecodeParms(dict);
isCCF = true;
} else if (comp == 6) {
pdfFilter = new DCTFilter();
@@ -149,16 +151,15 @@
doc.getProfile().verifyTransparencyAllowed(fopImage.getOriginalURI());
//TODO Implement code to combine image with background color if transparency is not
//allowed (need BufferedImage support for that)
- byte [] softMask = fopImage.getSoftMask();
- if (softMask == null) {
+ byte [] softMaskBitmap = fopImage.getSoftMask();
+ if (softMaskBitmap == null) {
return;
}
BitmapImage fopimg = new BitmapImage
("Mask:" + key, fopImage.getWidth(), fopImage.getHeight(),
- softMask, null);
+ softMaskBitmap, null);
fopimg.setColorSpace(new PDFDeviceColorSpace(PDFDeviceColorSpace.DEVICE_GRAY));
- PDFXObject xobj = doc.addImage(null, fopimg);
- softMaskRef = xobj.referencePDF();
+ softMask = doc.addImage(null, fopimg).makeReference();
}
if (doc.getProfile().getPDFAMode().isPDFA1LevelB()) {
if (pdfCS != null
@@ -236,13 +237,16 @@
return maskRef;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public String getSoftMask() {
- return softMaskRef;
+ return softMask.toInlinePDFString();
}
+ /** {@inheritDoc} */
+ public PDFReference getSoftMaskReference() {
+ return softMask;
+ }
+
/** @return true for CMYK images generated by Adobe Photoshop */
public boolean isInverted() {
return fopImage.isInverted();
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/pdf/PDFRenderer.java Thu Nov 8 13:27:19 2007
@@ -20,58 +20,56 @@
package org.apache.fop.render.pdf;
// Java
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.awt.geom.Point2D;
import java.awt.Color;
import java.awt.color.ColorSpace;
import java.awt.color.ICC_Profile;
-import java.awt.geom.Rectangle2D;
import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
import java.util.Iterator;
-import java.util.Map;
import java.util.List;
+import java.util.Map;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
-// XML
-import org.w3c.dom.Document;
-
-// Avalon
import org.apache.commons.io.IOUtils;
-
-// FOP
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.MimeConstants;
import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
+import org.apache.fop.area.BookmarkData;
import org.apache.fop.area.CTM;
+import org.apache.fop.area.DestinationData;
import org.apache.fop.area.LineArea;
import org.apache.fop.area.OffDocumentExtensionAttachment;
+import org.apache.fop.area.OffDocumentItem;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.Trait;
-import org.apache.fop.area.OffDocumentItem;
-import org.apache.fop.area.BookmarkData;
import org.apache.fop.area.inline.AbstractTextArea;
-import org.apache.fop.area.inline.TextArea;
import org.apache.fop.area.inline.Image;
-import org.apache.fop.area.inline.Leader;
import org.apache.fop.area.inline.InlineArea;
import org.apache.fop.area.inline.InlineParent;
-import org.apache.fop.area.inline.WordArea;
+import org.apache.fop.area.inline.Leader;
import org.apache.fop.area.inline.SpaceArea;
-import org.apache.fop.fonts.Typeface;
+import org.apache.fop.area.inline.TextArea;
+import org.apache.fop.area.inline.WordArea;
+import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.extensions.ExtensionAttachment;
+import org.apache.fop.fo.extensions.xmp.XMPMetadata;
import org.apache.fop.fonts.Font;
+import org.apache.fop.fonts.Typeface;
import org.apache.fop.image.FopImage;
import org.apache.fop.image.ImageFactory;
import org.apache.fop.image.XMLImage;
-import org.apache.fop.pdf.PDFAction;
import org.apache.fop.pdf.PDFAMode;
+import org.apache.fop.pdf.PDFAction;
import org.apache.fop.pdf.PDFAnnotList;
import org.apache.fop.pdf.PDFColor;
import org.apache.fop.pdf.PDFConformanceException;
@@ -102,14 +100,10 @@
import org.apache.fop.render.RendererContext;
import org.apache.fop.util.CharUtilities;
import org.apache.fop.util.ColorProfileUtil;
-import org.apache.fop.fo.Constants;
-import org.apache.fop.fo.extensions.ExtensionAttachment;
-import org.apache.fop.fo.extensions.xmp.XMPMetadata;
import org.apache.xmlgraphics.xmp.Metadata;
import org.apache.xmlgraphics.xmp.schemas.XMPBasicAdapter;
import org.apache.xmlgraphics.xmp.schemas.XMPBasicSchema;
-
-import org.apache.fop.area.DestinationData;
+import org.w3c.dom.Document;
/**
* Renderer that renders areas to PDF.
@@ -256,6 +250,9 @@
*/
protected boolean inTextMode = false;
+ /** Image handler registry */
+ private PDFImageHandlerRegistry imageHandlerRegistry = new PDFImageHandlerRegistry();
+
/**
* create the PDF renderer
*/
@@ -1659,21 +1656,21 @@
}
/**
- * Adds a PDF XObject (a bitmap) to the PDF that will later be referenced.
+ * Adds a PDF XObject (a bitmap or form) to the PDF that will later be referenced.
* @param url URL of the bitmap
* @param pos Position of the bitmap
*/
protected void putImage(String url, Rectangle2D pos) {
- PDFXObject xobject = pdfDoc.getImage(url);
+ url = ImageFactory.getURL(url);
+ PDFXObject xobject = pdfDoc.getXObject(url);
if (xobject != null) {
float w = (float) pos.getWidth() / 1000f;
float h = (float) pos.getHeight() / 1000f;
placeImage((float)pos.getX() / 1000f,
- (float)pos.getY() / 1000f, w, h, xobject.getXNumber());
+ (float)pos.getY() / 1000f, w, h, xobject);
return;
}
- url = ImageFactory.getURL(url);
ImageFactory fact = userAgent.getFactory().getImageFactory();
FopImage fopimage = fact.getImage(url, userAgent);
if (fopimage == null) {
@@ -1683,7 +1680,24 @@
return;
}
String mime = fopimage.getMimeType();
- if ("text/xml".equals(mime)) {
+
+ //First check for a dynamically registered handler
+ PDFImageHandler handler = imageHandlerRegistry.getHandler(mime);
+ if (handler != null) {
+ PDFXObject xobj;
+ try {
+ xobj = handler.generateImage(fopimage, url, pdfDoc);
+ } catch (IOException ioe) {
+ log.error("I/O error while handling " + mime + " image", ioe);
+ return;
+ }
+ fact.releaseImage(url, userAgent);
+
+ float w = (float)pos.getWidth() / 1000f;
+ float h = (float)pos.getHeight() / 1000f;
+ placeImage((float) pos.getX() / 1000,
+ (float) pos.getY() / 1000, w, h, xobj);
+ } else if ("text/xml".equals(mime)) {
if (!fopimage.load(FopImage.ORIGINAL_DATA)) {
return;
}
@@ -1701,7 +1715,7 @@
renderDocument(doc, ns, pos, null);
} else if ("image/eps".equals(mime)) {
FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
- int xobj = pdfDoc.addImage(currentContext, pdfimage).getXNumber();
+ PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
fact.releaseImage(url, userAgent);
float w = (float)pos.getWidth() / 1000f;
@@ -1710,7 +1724,7 @@
(float) pos.getY() / 1000, w, h, xobj);
} else if ("image/jpeg".equals(mime) || "image/tiff".equals(mime)) {
FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
- int xobj = pdfDoc.addImage(currentContext, pdfimage).getXNumber();
+ PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
fact.releaseImage(url, userAgent);
float w = (float)pos.getWidth() / 1000f;
@@ -1722,7 +1736,7 @@
return;
}
FopPDFImage pdfimage = new FopPDFImage(fopimage, url);
- int xobj = pdfDoc.addImage(currentContext, pdfimage).getXNumber();
+ PDFXObject xobj = pdfDoc.addImage(currentContext, pdfimage);
fact.releaseImage(url, userAgent);
float w = (float) pos.getWidth() / 1000f;
@@ -1745,15 +1759,15 @@
* @param y Y coordinate
* @param w width for image
* @param h height for image
- * @param xobj object number of the referenced image
+ * @param xobj the image XObject
*/
- protected void placeImage(float x, float y, float w, float h, int xobj) {
+ protected void placeImage(float x, float y, float w, float h, PDFXObject xobj) {
saveGraphicsState();
currentStream.add(format(w) + " 0 0 "
+ format(-h) + " "
+ format(currentIPPosition / 1000f + x) + " "
+ format(currentBPPosition / 1000f + h + y)
- + " cm\n" + "/Im" + xobj + " Do\n");
+ + " cm\n" + xobj.getName() + " Do\n");
restoreGraphicsState();
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/AbstractPSTranscoder.java Thu Nov 8 13:27:19 2007
@@ -21,7 +21,6 @@
import java.awt.Color;
-
import java.io.IOException;
import org.apache.avalon.framework.configuration.Configuration;
@@ -29,15 +28,12 @@
import org.apache.batik.bridge.UnitProcessor;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderOutput;
-
import org.apache.batik.transcoder.image.ImageTranscoder;
-
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontSetup;
import org.apache.fop.svg.AbstractFOPTranscoder;
import org.apache.xmlgraphics.java2d.ps.AbstractPSDocumentGraphics2D;
import org.apache.xmlgraphics.java2d.ps.TextHandler;
-
import org.w3c.dom.Document;
import org.w3c.dom.svg.SVGLength;
@@ -137,15 +133,6 @@
}
}
- /** @return true if text should be stroked rather than painted using text operators */
- protected boolean isTextStroked() {
- boolean stroke = false;
- if (hints.containsKey(KEY_STROKE_TEXT)) {
- stroke = ((Boolean)hints.get(KEY_STROKE_TEXT)).booleanValue();
- }
- return stroke;
- }
-
/** {@inheritDoc} */
protected BridgeContext createBridgeContext() {
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/NativeTextHandler.java Thu Nov 8 13:27:19 2007
@@ -27,7 +27,6 @@
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontSetup;
import org.apache.fop.fonts.FontTriplet;
-
import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
import org.apache.xmlgraphics.java2d.ps.TextHandler;
import org.apache.xmlgraphics.ps.PSGenerator;
@@ -96,9 +95,7 @@
/** {@inheritDoc} */
public void writePageSetup() throws IOException {
- if (fontInfo != null) {
- getPSGenerator().writeln("FOPFonts begin");
- }
+ //nop
}
/**
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRenderer.java Thu Nov 8 13:27:19 2007
@@ -830,6 +830,7 @@
PSExtensionAttachment comment = (PSExtensionAttachment)iter.next();
gen.commentln("%" + comment.getContent());
}
+ footerComments.clear();
}
gen.writeDSCComment(DSCConstants.PAGES, new Integer(this.currentPageNumber));
gen.getResourceTracker().writeResources(false, gen);
@@ -840,7 +841,12 @@
IOUtils.closeQuietly(gen.getOutputStream());
rewritePostScriptFile();
}
- this.pageDeviceDictionary.clear();
+ if (footerComments != null) {
+ headerComments.clear();
+ }
+ if (pageDeviceDictionary != null) {
+ pageDeviceDictionary.clear();
+ }
}
/**
@@ -910,12 +916,12 @@
}
} else if (attachment instanceof PSCommentBefore) {
if (headerComments == null) {
- headerComments = new java.util.TreeSet();
+ headerComments = new java.util.ArrayList();
}
headerComments.add(attachment);
} else if (attachment instanceof PSCommentAfter) {
if (footerComments == null) {
- footerComments = new java.util.TreeSet();
+ footerComments = new java.util.ArrayList();
}
footerComments.add(attachment);
}
@@ -1055,10 +1061,12 @@
if (page.hasExtensionAttachments()) {
List extensionAttachments = page.getExtensionAttachments();
for (int i = 0; i < extensionAttachments.size(); i++) {
- PSExtensionAttachment attachment
- = (PSExtensionAttachment)extensionAttachments.get(i);
- if (attachment instanceof PSCommentBefore) {
- gen.commentln("%" + attachment.getContent());
+ Object attObj = extensionAttachments.get(i);
+ if (attObj instanceof PSExtensionAttachment) {
+ PSExtensionAttachment attachment = (PSExtensionAttachment)attObj;
+ if (attachment instanceof PSCommentBefore) {
+ gen.commentln("%" + attachment.getContent());
+ }
}
}
}
@@ -1091,10 +1099,12 @@
if (page.hasExtensionAttachments()) {
List extensionAttachments = page.getExtensionAttachments();
for (int i = 0; i < extensionAttachments.size(); i++) {
- PSExtensionAttachment attachment;
- attachment = (PSExtensionAttachment)extensionAttachments.get(i);
- if (attachment instanceof PSCommentAfter) {
- gen.commentln("%" + attachment.getContent());
+ Object attObj = extensionAttachments.get(i);
+ if (attObj instanceof PSExtensionAttachment) {
+ PSExtensionAttachment attachment = (PSExtensionAttachment)attObj;
+ if (attachment instanceof PSCommentAfter) {
+ gen.commentln("%" + attachment.getContent());
+ }
}
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java Thu Nov 8 13:27:19 2007
@@ -24,6 +24,7 @@
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.render.PrintRendererConfigurator;
import org.apache.fop.render.Renderer;
+import org.apache.xmlgraphics.ps.PSGenerator;
/**
* Postscript renderer config
@@ -55,7 +56,8 @@
Configuration child;
child = cfg.getChild("language-level");
if (child != null) {
- psRenderer.setLanguageLevel(child.getValueAsInteger(-1));
+ psRenderer.setLanguageLevel(child.getValueAsInteger(
+ PSGenerator.DEFAULT_LANGUAGE_LEVEL));
}
child = cfg.getChild("optimize-resources");
if (child != null) {
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentAfterElement.java Thu Nov 8 13:27:19 2007
@@ -27,6 +27,8 @@
*/
public class PSCommentAfterElement extends AbstractPSCommentElement {
+ protected static final String ELEMENT = "ps-comment-after";
+
/**
* Main constructor
* @param parent node
@@ -40,7 +42,7 @@
* @see org.apache.fop.fo.FONode#getLocalName()
*/
public String getLocalName() {
- return "ps-comment-after";
+ return ELEMENT;
}
/**
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSCommentBeforeElement.java Thu Nov 8 13:27:19 2007
@@ -27,6 +27,8 @@
*/
public class PSCommentBeforeElement extends AbstractPSCommentElement {
+ protected static final String ELEMENT = "ps-comment-before";
+
/**
* Main constructor
* @param parent parent node
@@ -40,7 +42,7 @@
* @see org.apache.fop.fo.FONode#getLocalName()
*/
public String getLocalName() {
- return "ps-comment-before";
+ return ELEMENT;
}
/**
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSExtensionElementMapping.java Thu Nov 8 13:27:19 2007
@@ -39,11 +39,11 @@
protected void initialize() {
if (foObjs == null) {
foObjs = new java.util.HashMap();
- foObjs.put("ps-setup-code", new PSSetupCodeMaker());
- foObjs.put("ps-page-setup-code", new PSPageSetupCodeMaker());
- foObjs.put("ps-setpagedevice", new PSSetPageDeviceMaker());
- foObjs.put("ps-comment-before", new PSCommentBeforeMaker());
- foObjs.put("ps-comment-after", new PSCommentAfterMaker());
+ foObjs.put(PSSetupCodeElement.ELEMENT, new PSSetupCodeMaker());
+ foObjs.put(PSPageSetupCodeElement.ELEMENT, new PSPageSetupCodeMaker());
+ foObjs.put(PSSetPageDeviceElement.ELEMENT, new PSSetPageDeviceMaker());
+ foObjs.put(PSCommentBeforeElement.ELEMENT, new PSCommentBeforeMaker());
+ foObjs.put(PSCommentAfterElement.ELEMENT, new PSCommentAfterMaker());
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSPageSetupCodeElement.java Thu Nov 8 13:27:19 2007
@@ -29,6 +29,8 @@
*/
public class PSPageSetupCodeElement extends AbstractPSExtensionObject {
+ protected static final String ELEMENT = "ps-page-setup-code";
+
/**
* Main constructor
* @param parent parent FO node
@@ -47,7 +49,7 @@
/** {@inheritDoc} */
public String getLocalName() {
- return "ps-page-setup-code";
+ return ELEMENT;
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetPageDeviceElement.java Thu Nov 8 13:27:19 2007
@@ -33,6 +33,8 @@
*/
public class PSSetPageDeviceElement extends AbstractPSExtensionElement {
+ protected static final String ELEMENT = "ps-setpagedevice";
+
/**
* Main constructor
* @param parent parent FO node
@@ -79,7 +81,7 @@
* @return local name
* @see org.apache.fop.fo.FONode#getLocalName() */
public String getLocalName() {
- return "ps-setpagedevice";
+ return ELEMENT;
}
/**
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/ps/extensions/PSSetupCodeElement.java Thu Nov 8 13:27:19 2007
@@ -29,6 +29,8 @@
*/
public class PSSetupCodeElement extends AbstractPSExtensionObject {
+ protected static final String ELEMENT = "ps-setup-code";
+
/**
* Main constructor
* @param parent parent FO node
@@ -47,7 +49,7 @@
/** {@inheritDoc} */
public String getLocalName() {
- return "ps-setup-code";
+ return ELEMENT;
}
}
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/RTFHandler.java Thu Nov 8 13:27:19 2007
@@ -65,12 +65,12 @@
import org.apache.fop.fo.flow.ListItemBody;
import org.apache.fop.fo.flow.ListItemLabel;
import org.apache.fop.fo.flow.PageNumber;
-import org.apache.fop.fo.flow.Table;
-import org.apache.fop.fo.flow.TableBody;
-import org.apache.fop.fo.flow.TableCell;
-import org.apache.fop.fo.flow.TableColumn;
-import org.apache.fop.fo.flow.TableHeader;
-import org.apache.fop.fo.flow.TableRow;
+import org.apache.fop.fo.flow.table.Table;
+import org.apache.fop.fo.flow.table.TableBody;
+import org.apache.fop.fo.flow.table.TableCell;
+import org.apache.fop.fo.flow.table.TableColumn;
+import org.apache.fop.fo.flow.table.TableHeader;
+import org.apache.fop.fo.flow.table.TableRow;
import org.apache.fop.fo.pagination.Flow;
import org.apache.fop.fo.pagination.PageSequence;
import org.apache.fop.fo.pagination.PageSequenceMaster;
Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java?rev=593328&r1=593327&r2=593328&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java (original)
+++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/render/rtf/TableAttributesConverter.java Thu Nov 8 13:27:19 2007
@@ -23,11 +23,11 @@
import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.Constants;
-import org.apache.fop.fo.flow.Table;
-import org.apache.fop.fo.flow.TableBody;
-import org.apache.fop.fo.flow.TableCell;
-import org.apache.fop.fo.flow.TableHeader;
-import org.apache.fop.fo.flow.TableRow;
+import org.apache.fop.fo.flow.table.Table;
+import org.apache.fop.fo.flow.table.TableBody;
+import org.apache.fop.fo.flow.table.TableCell;
+import org.apache.fop.fo.flow.table.TableHeader;
+import org.apache.fop.fo.flow.table.TableRow;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
import org.apache.fop.render.rtf.rtflib.rtfdoc.ITableAttributes;
import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfAttributes;
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org