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-unsubscr...@xmlgraphics.apache.org For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org