Author: ssteiner
Date: Fri Nov  3 15:33:27 2017
New Revision: 1814217

URL: http://svn.apache.org/viewvc?rev=1814217&view=rev
Log:
FOP-2754: Error when merging True Type font with CFF PDF font

Added:
    xmlgraphics/fop-pdf-images/trunk/test/resources/type0cff.pdf   (with props)
    xmlgraphics/fop-pdf-images/trunk/test/resources/type0tt.pdf   (with props)
Modified:
    
xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
    
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.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=1814217&r1=1814216&r2=1814217&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 Nov  3 15:33:27 2017
@@ -44,6 +44,7 @@ import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSString;
 
 import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.pdmodel.font.PDCIDFont;
 import org.apache.pdfbox.pdmodel.font.PDCIDFontType0;
 import org.apache.pdfbox.pdmodel.font.PDCIDFontType2;
 import org.apache.pdfbox.pdmodel.font.PDFont;
@@ -164,22 +165,22 @@ public class MergeFontsPDFWriter extends
         if (font.getName() != null) {
             String extra = "";
             String name = getName(font.getName()) + "_" + 
((COSName)fontData.getItem(COSName.SUBTYPE)).getName();
-            if (font instanceof PDType0Font
-                    && ((PDType0Font) font).getDescendantFont() instanceof 
PDCIDFontType0) {
-                CFFFont cffFont = ((PDCIDFontType0) ((PDType0Font) 
font).getDescendantFont()).getCFFFont();
-                if (cffFont instanceof CFFCIDFont
-                        && 
((CFFCIDFont)cffFont).getFdSelect().getClass().getName()
-                        
.equals("org.apache.fontbox.cff.CFFParser$Format0FDSelect")) {
-                    extra += "format0";
-                }
-                return name + extra;
-            } else if (font instanceof PDType0Font
-                    && fontContainer.getToUnicode() != null
-                    && ((PDType0Font) font).getDescendantFont() instanceof 
PDCIDFontType2) {
-                if (!isSubsetFont(font.getName())) {
-                    extra = "f3";
+            if (font instanceof PDType0Font) {
+                PDCIDFont descendantFont = ((PDType0Font) 
font).getDescendantFont();
+                if (descendantFont instanceof PDCIDFontType0) {
+                    CFFFont cffFont = ((PDCIDFontType0) 
descendantFont).getCFFFont();
+                    if (cffFont instanceof CFFCIDFont
+                            && ((CFFCIDFont) 
cffFont).getFdSelect().getClass().getName()
+                            
.equals("org.apache.fontbox.cff.CFFParser$Format0FDSelect")) {
+                        extra += "format0";
+                    }
+                    return name + extra + "cff";
+                } else if (descendantFont instanceof PDCIDFontType2 && 
fontContainer.getToUnicode() != null) {
+                    if (!isSubsetFont(font.getName())) {
+                        extra = "f3";
+                    }
+                    return name + extra;
                 }
-                return name + extra;
             } else if (font instanceof PDTrueTypeFont && 
isSubsetFont(font.getName())) {
                 TrueTypeFont tt = ((PDTrueTypeFont) font).getTrueTypeFont();
                 for (CmapSubtable c : tt.getCmap().getCmaps()) {

Modified: 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1814217&r1=1814216&r2=1814217&view=diff
==============================================================================
--- 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
 (original)
+++ 
xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
 Fri Nov  3 15:33:27 2017
@@ -113,6 +113,8 @@ public class PDFBoxAdapterTestCase {
     private static final String ERROR = "test/resources/error.pdf";
     private static final String LIBREOFFICE = "test/resources/libreoffice.pdf";
     private static final String SMASK = "test/resources/smask.pdf";
+    private static final String TYPE0TT = "test/resources/type0tt.pdf";
+    private static final String TYPE0CFF = "test/resources/type0cff.pdf";
 
     private static PDFPage getPDFPage(PDFDocument doc) {
         final Rectangle2D r = new Rectangle2D.Double();
@@ -158,7 +160,18 @@ public class PDFBoxAdapterTestCase {
         Assert.assertTrue(msg, msg.contains("/URWChanceryL-MediItal_Type1 20 
Tf"));
         msg = writeText(fi, Type1Subset4);
         Assert.assertTrue(msg, msg.contains("/F15-1521012718 40 Tf"));
+        parseFonts(fi);
+    }
+
+    @Test
+    public void testMergeTTCFF() throws IOException {
+        FontInfo fi = new FontInfo();
+        writeText(fi, TYPE0TT);
+        writeText(fi, TYPE0CFF);
+        parseFonts(fi);
+    }
 
+    private void parseFonts(FontInfo fi) throws IOException {
         for (Typeface font : fi.getUsedFonts().values()) {
             InputStream is = ((CustomFont) font).getInputStream();
             if (font.getFontType() == FontType.TYPE1C || font.getFontType() == 
FontType.CIDTYPE0) {

Added: xmlgraphics/fop-pdf-images/trunk/test/resources/type0cff.pdf
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/resources/type0cff.pdf?rev=1814217&view=auto
==============================================================================
Binary file - no diff available.

Propchange: xmlgraphics/fop-pdf-images/trunk/test/resources/type0cff.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: xmlgraphics/fop-pdf-images/trunk/test/resources/type0tt.pdf
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/resources/type0tt.pdf?rev=1814217&view=auto
==============================================================================
Binary file - no diff available.

Propchange: xmlgraphics/fop-pdf-images/trunk/test/resources/type0tt.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org

Reply via email to