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 ss...@apache.org on 2014/07/04 16:37:14 UTC

svn commit: r1607866 - in /xmlgraphics/fop-pdf-images/branches/Temp_FontMerging: src/java/org/apache/fop/render/pdf/pdfbox/ test/java/org/apache/fop/render/pdf/

Author: ssteiner
Date: Fri Jul  4 14:37:14 2014
New Revision: 1607866

URL: http://svn.apache.org/r1607866
Log:
Fix merging word truetype

Modified:
    xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
    xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java
    xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
    xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java

Modified: xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java?rev=1607866&r1=1607865&r2=1607866&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java (original)
+++ xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java Fri Jul  4 14:37:14 2014
@@ -216,6 +216,7 @@ public class MergeTTFonts extends TTFSub
         readHorizontalHeader();
         readHorizontalMetrics();
         readIndexToLocation();
+        int sgsize = subsetGlyphs.size();
         if (!cid && subsetGlyphs.size() <= 1) {
             for (int i = 0; i < mtxTab.length; i++) {
                 subsetGlyphs.put(i, i);
@@ -224,7 +225,10 @@ public class MergeTTFonts extends TTFSub
         scanGlyphs(fontFile, subsetGlyphs);
         readGlyf(subsetGlyphs, fontFile);
         if (nhmtxDiff == null) {
-            nhmtxDiff = subsetGlyphs.size() - nhmtx;
+            nhmtxDiff = sgsize - nhmtx;
+            if (nhmtxDiff < 0) {
+                nhmtxDiff = 0;
+            }
         }
     }
 

Modified: xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java?rev=1607866&r1=1607865&r2=1607866&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java (original)
+++ xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/MergeType1Fonts.java Fri Jul  4 14:37:14 2014
@@ -101,16 +101,18 @@ public class MergeType1Fonts extends Typ
             subByteMap.put(i, subArray.get(i));
         }
         Map<String, byte[]> cs = font.getType1Font().getCharStringsDict();
-        int skipBytes = 4;
-        PostscriptParser.PSElement element = getElement("lenIV", mainSection);
+        int lenIV = 4;
+        PostscriptParser.PSElement element = getElement("/lenIV", mainSection);
         if (element != null && element instanceof PostscriptParser.PSVariable) {
-            PostscriptParser.PSVariable lenIV = (PostscriptParser.PSVariable)element;
-            skipBytes = Integer.parseInt(lenIV.getValue());
+            PostscriptParser.PSVariable lenIVVar = (PostscriptParser.PSVariable)element;
+            lenIV = Integer.parseInt(lenIVVar.getValue());
         }
         for (String e : cs.keySet()) {
             byte[] charStringEntry = getBinaryEntry(charStrings.getBinaryEntries().get("/" + e), decoded);
-            charStringEntry = BinaryCoder.decodeBytes(charStringEntry, 4330, skipBytes);
-            charStringEntry = BinaryCoder.encodeBytes(charStringEntry, 4330, 4);
+            if (lenIV != 4) {
+                charStringEntry = BinaryCoder.decodeBytes(charStringEntry, 4330, lenIV);
+                charStringEntry = BinaryCoder.encodeBytes(charStringEntry, 4330, 4);
+            }
             subsetCharStrings.put("/" + e, charStringEntry);
         }
     }
@@ -216,6 +218,7 @@ public class MergeType1Fonts extends Typ
         String nd = findVariable(decoded, mainSection, new String[] {"def", "noaccess def"}, "noaccess def");
         String np = findVariable(decoded, mainSection, new String[] {"put", "noaccess put"}, "noaccess put");
         main.write(subrsBeforeStream.toByteArray());
+        writeString("/lenIV 4 def", main);
         writeString("/Subrs " + subByteMap.size() + " array" + eol, main);
         for (Map.Entry<Integer, byte[]> e : subByteMap.entrySet()) {
             byte[] encoded = BinaryCoder.encodeBytes(e.getValue(), 4330, 4);

Modified: xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java?rev=1607866&r1=1607865&r2=1607866&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java (original)
+++ xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java Fri Jul  4 14:37:14 2014
@@ -495,8 +495,12 @@ public class PDFBoxAdapter {
             readCharMap(font, gidToGlyph, glyphData, mainFont, oldToNewGIMap);
             FontFileReader ffr = readFontFile(mainFont);
             if (ttf != null) {
-                mergeMaxp(ttf);
+                mergeMaxp(ttf, mergeTTFonts.maxp);
+                int sizeNoCompGlyphs = oldToNewGIMap.size();
                 mergeTTFonts.readFont(ffr, oldToNewGIMap, true);
+                if (oldToNewGIMap.size() > sizeNoCompGlyphs) {
+                    cidSet.mapChar(256 * 256, (char) 0);
+                }
             } else {
                 mergeCFFFonts.readType1CFont(new ByteArrayInputStream(ffr.getAllBytes()), getEmbedFontName());
             }
@@ -583,26 +587,6 @@ public class PDFBoxAdapter {
             return mapping;
         }
 
-        private void mergeMaxp(TrueTypeFont ttf) {
-            MaximumProfileTable mp = ttf.getMaximumProfile();
-            MaximumProfileTable outMaxp = mergeTTFonts.maxp;
-            outMaxp.setVersion(mp.getVersion());
-            outMaxp.setNumGlyphs(outMaxp.getNumGlyphs() + mp.getNumGlyphs());
-            outMaxp.setMaxPoints(outMaxp.getMaxPoints() + mp.getMaxPoints());
-            outMaxp.setMaxContours(outMaxp.getMaxContours() + mp.getMaxContours());
-            outMaxp.setMaxCompositePoints(outMaxp.getMaxCompositePoints() + mp.getMaxCompositePoints());
-            outMaxp.setMaxCompositeContours(outMaxp.getMaxCompositeContours() + mp.getMaxCompositeContours());
-            outMaxp.setMaxZones(outMaxp.getMaxZones() + mp.getMaxZones());
-            outMaxp.setMaxTwilightPoints(outMaxp.getMaxTwilightPoints() + mp.getMaxTwilightPoints());
-            outMaxp.setMaxStorage(outMaxp.getMaxStorage() + mp.getMaxStorage());
-            outMaxp.setMaxFunctionDefs(outMaxp.getMaxFunctionDefs() + mp.getMaxFunctionDefs());
-            outMaxp.setMaxInstructionDefs(outMaxp.getMaxInstructionDefs() + mp.getMaxInstructionDefs());
-            outMaxp.setMaxStackElements(outMaxp.getMaxStackElements() + mp.getMaxStackElements());
-            outMaxp.setMaxSizeOfInstructions(outMaxp.getMaxSizeOfInstructions() + mp.getMaxSizeOfInstructions());
-            outMaxp.setMaxComponentElements(outMaxp.getMaxComponentElements() + mp.getMaxComponentElements());
-            outMaxp.setMaxComponentDepth(outMaxp.getMaxComponentDepth() + mp.getMaxComponentDepth());
-        }
-
         private boolean differentGlyphData(GlyphData[] data, Map<Integer, String> mapping) throws IOException {
             Map<String, Integer> tmpMap = new HashMap<String, Integer>();
             for (Map.Entry<Integer, String> entry : mapping.entrySet()) {
@@ -830,17 +814,16 @@ public class PDFBoxAdapter {
             if (font instanceof PDTrueTypeFont) {
                 TrueTypeFont ttfont = ((PDTrueTypeFont) font).getTTFFont();
                 CMAPEncodingEntry[] cmapList = ttfont.getCMAP().getCmaps();
-                CMAPEncodingEntry c = cmapList[0];
-                if (cmapList.length > 1) {
-                    c = cmapList[1];
-                }
-                newCmap.platformId = c.getPlatformId();
-                newCmap.platformEncodingId = c.getPlatformEncodingId();
-                for (int i = 0; i < 256 * 256; i++) {
-                    if (c.getGlyphId(i) != 0) {
-                        newCmap.glyphIdToCharacterCode.put(i, c.getGlyphId(i));
+                for (CMAPEncodingEntry c : cmapList) {
+                    newCmap.platformId = c.getPlatformId();
+                    newCmap.platformEncodingId = c.getPlatformEncodingId();
+                    for (int i = 0; i < 256 * 256; i++) {
+                        if (c.getGlyphId(i) != 0) {
+                            newCmap.glyphIdToCharacterCode.put(i, c.getGlyphId(i));
+                        }
                     }
                 }
+                mergeMaxp(ttfont, mergeTTFonts.maxp);
             }
         }
 
@@ -1142,6 +1125,25 @@ public class PDFBoxAdapter {
         }
     }
 
+    private void mergeMaxp(TrueTypeFont ttf, MaximumProfileTable outMaxp) {
+        MaximumProfileTable mp = ttf.getMaximumProfile();
+        outMaxp.setVersion(mp.getVersion());
+        outMaxp.setNumGlyphs(outMaxp.getNumGlyphs() + mp.getNumGlyphs());
+        outMaxp.setMaxPoints(outMaxp.getMaxPoints() + mp.getMaxPoints());
+        outMaxp.setMaxContours(outMaxp.getMaxContours() + mp.getMaxContours());
+        outMaxp.setMaxCompositePoints(outMaxp.getMaxCompositePoints() + mp.getMaxCompositePoints());
+        outMaxp.setMaxCompositeContours(outMaxp.getMaxCompositeContours() + mp.getMaxCompositeContours());
+        outMaxp.setMaxZones(outMaxp.getMaxZones() + mp.getMaxZones());
+        outMaxp.setMaxTwilightPoints(outMaxp.getMaxTwilightPoints() + mp.getMaxTwilightPoints());
+        outMaxp.setMaxStorage(outMaxp.getMaxStorage() + mp.getMaxStorage());
+        outMaxp.setMaxFunctionDefs(outMaxp.getMaxFunctionDefs() + mp.getMaxFunctionDefs());
+        outMaxp.setMaxInstructionDefs(outMaxp.getMaxInstructionDefs() + mp.getMaxInstructionDefs());
+        outMaxp.setMaxStackElements(outMaxp.getMaxStackElements() + mp.getMaxStackElements());
+        outMaxp.setMaxSizeOfInstructions(outMaxp.getMaxSizeOfInstructions() + mp.getMaxSizeOfInstructions());
+        outMaxp.setMaxComponentElements(outMaxp.getMaxComponentElements() + mp.getMaxComponentElements());
+        outMaxp.setMaxComponentDepth(outMaxp.getMaxComponentDepth() + mp.getMaxComponentDepth());
+    }
+
     public class PDFWriter {
         protected StringBuilder s = new StringBuilder();
         private String key;

Modified: xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1607866&r1=1607865&r2=1607866&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/branches/Temp_FontMerging/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java Fri Jul  4 14:37:14 2014
@@ -246,7 +246,7 @@ public class PDFBoxAdapterTestCase {
         Assert.assertEquals(name, "TimesNewRomanPSMT_TrueType");
         Assert.assertEquals(mbfont.getFontName(), "TimesNewRomanPSMT_TrueType");
         byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
-        Assert.assertEquals(is.length, 34228);
+        Assert.assertEquals(is.length, 34264);
         doc.close();
         doc2.close();
     }



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