Author: ssteiner Date: Fri Oct 9 08:57:22 2020 New Revision: 1882340 URL: http://svn.apache.org/viewvc?rev=1882340&view=rev Log: FOP-2974: Handle space in COSName
Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java?rev=1882340&r1=1882339&r2=1882340&view=diff ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java (original) +++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java Fri Oct 9 08:57:22 2020 @@ -101,7 +101,7 @@ public class MergeFontsPDFWriter extends internalName = getNewFont(fontData, fontInfo, fontsToRemove.values()); } if (fontData == null || internalName == null) { - s.append("/" + key.getName(cn)); + key.writeName(s, cn); if (op.getName().equals("Tf")) { font = null; oldFont = null; Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java?rev=1882340&r1=1882339&r2=1882340&view=diff ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java (original) +++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFWriter.java Fri Oct 9 08:57:22 2020 @@ -104,9 +104,9 @@ public class PDFWriter { } } else if (c instanceof COSName) { COSName cn = (COSName)c; - String name = key.getName(cn); - s.append("/" + name); + key.writeName(s, cn); s.append(" "); + String name = key.getName(cn); if (!name.equals(cn.getName())) { keyUsed = true; } Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java?rev=1882340&r1=1882339&r2=1882340&view=diff ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java (original) +++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java Fri Oct 9 08:57:22 2020 @@ -240,7 +240,7 @@ public class StructureTreeMerger { if (baseKid instanceof COSInteger) { COSInteger number = (COSInteger) baseKid; createKids(number, parentDict, parent, originatedFromTableRow); - } else { + } else if (baseKid instanceof COSDictionary) { COSDictionary unwrappedDict = (COSDictionary)baseKid; if (unwrappedDict.getDictionaryObject(COSName.S) == null) { COSDictionary mcrDict = (COSDictionary)baseKid; @@ -417,13 +417,15 @@ public class StructureTreeMerger { } else if (kid instanceof COSObject) { COSObject kidObject = (COSObject)kid; COSBase base = kidObject.getObject(); - COSDictionary temp = (COSDictionary)base; - if (temp.getDictionaryObject(COSName.S) != null && temp.getItem(COSName.K) != null) { + if (base instanceof COSDictionary) { + COSDictionary temp = (COSDictionary) base; + if (temp.getDictionaryObject(COSName.S) != null && temp.getItem(COSName.K) != null) { - COSBase tempKids = temp.getItem(COSName.K); - findLeafKids(tempKids, kidObject); - } else { - findLeafKids(temp, parent); + COSBase tempKids = temp.getItem(COSName.K); + findLeafKids(tempKids, kidObject); + } else { + findLeafKids(temp, parent); + } } } else if (kid instanceof COSDictionary) { COSDictionary kidDictionary = (COSDictionary)kid; Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java?rev=1882340&r1=1882339&r2=1882340&view=diff ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java (original) +++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java Fri Oct 9 08:57:22 2020 @@ -18,6 +18,8 @@ /* $Id$ */ package org.apache.fop.render.pdf.pdfbox; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -27,6 +29,8 @@ import org.apache.pdfbox.cos.COSDictiona import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.cos.COSObject; +import org.apache.fop.pdf.PDFDocument; + public class UniqueName { private String key; private List<COSName> resourceNames; @@ -48,6 +52,16 @@ public class UniqueName { return cn.getName(); } + protected void writeName(StringBuilder sb, COSName cn) throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + cn.writePDF(bos); + String name = bos.toString(PDFDocument.ENCODING); + sb.append(name); + if (resourceNames.contains(cn)) { + sb.append(key); + } + } + private List<COSName> getResourceNames(COSDictionary sourcePageResources) { List<COSName> resourceNames = new ArrayList<COSName>(); for (COSBase e : sourcePageResources.getValues()) { Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java?rev=1882340&r1=1882339&r2=1882340&view=diff ============================================================================== --- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java (original) +++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFWriterTestCase.java Fri Oct 9 08:57:22 2020 @@ -27,6 +27,7 @@ import org.apache.pdfbox.pdmodel.PDDocum import org.apache.pdfbox.pdmodel.common.PDStream; import org.apache.fop.render.pdf.pdfbox.PDFWriter; +import org.apache.fop.render.pdf.pdfbox.UniqueName; public class PDFWriterTestCase { @Test @@ -79,4 +80,13 @@ public class PDFWriterTestCase { String out = pdfWriter.writeText(pdStream); Assert.assertEquals(out, text); } + + @Test + public void testSpaceInName() throws IOException { + String text = "/a#20a a\n"; + PDStream pdStream = new PDStream(new PDDocument(), new ByteArrayInputStream(text.getBytes("UTF-8"))); + PDFWriter pdfWriter = new PDFWriter(new UniqueName("", null, true), 0); + String out = pdfWriter.writeText(pdStream); + Assert.assertEquals(out, text); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org