FOP-2575: Merge unicode cmap
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop-pdf-images/trunk@1729397 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java b/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java
index 6dcd95f..5261256 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleByteFont.java
@@ -179,11 +179,11 @@
for (CMAPEncodingEntry c : cmapList) {
MergeTTFonts.Cmap tempCmap = getNewCmap(c.getPlatformId(), c.getPlatformEncodingId());
for (int i = 0; i < 256 * 256; i++) {
- if (c.getGlyphId(i) != 0) {
- tempCmap.glyphIdToCharacterCode.put(i, c.getGlyphId(i));
+ int gid = c.getGlyphId(i);
+ if (gid != 0) {
+ tempCmap.glyphIdToCharacterCode.put(i, gid);
}
}
- newCmap.add(tempCmap);
}
FOPPDFMultiByteFont.mergeMaxp(ttfont, mergeTTFonts.maxp);
}
@@ -195,7 +195,9 @@
return cmap;
}
}
- return new MergeTTFonts.Cmap(platformID, platformEncodingID);
+ MergeTTFonts.Cmap cmap = new MergeTTFonts.Cmap(platformID, platformEncodingID);
+ newCmap.add(cmap);
+ return cmap;
}
@Override
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java b/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
index 6ea51bc..5caaaa6 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/MergeFontsPDFWriter.java
@@ -211,6 +211,12 @@
if (cs.getClass().getName().equals("org.apache.fontbox.cff.CFFParser$Format1Charset")) {
extra += "f1cs";
}
+ if (font.getFontEncoding() != null) {
+ String enc = font.getFontEncoding().getClass().getSimpleName();
+ if (!"DictionaryEncoding".equals(enc)) {
+ extra += enc;
+ }
+ }
return name + extra;
}
diff --git a/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java b/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
index cd2385c..b686793 100644
--- a/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
+++ b/src/java/org/apache/fop/render/pdf/pdfbox/MergeTTFonts.java
@@ -322,6 +322,8 @@
}
private void writeCMAP(List<Cmap> cmaps) {
+ mergeUniCmap(cmaps);
+
int checksum = currentPos;
pad4();
int cmapPos = currentPos;
@@ -388,6 +390,20 @@
realSize += currentPos - cmapPos;
}
+ private void mergeUniCmap(List<Cmap> cmaps) {
+ Cmap uniCmap = null;
+ for (Cmap cmap : cmaps) {
+ if (cmap.platformId == 3 && cmap.platformEncodingId == 1) {
+ uniCmap = cmap;
+ }
+ }
+ if (uniCmap != null) {
+ for (Cmap cmap : cmaps) {
+ uniCmap.glyphIdToCharacterCode.putAll(cmap.glyphIdToCharacterCode);
+ }
+ }
+ }
+
private int getCmapOffset(List<Cmap> cmaps, int index) {
int result = 0;
for (int i = 0; i < index; i++) {
diff --git a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
index fca2851..9860e31 100644
--- a/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
@@ -285,7 +285,7 @@
Assert.assertEquals(name, "TimesNewRomanPSMT_TrueType");
Assert.assertEquals(mbfont.getFontName(), "TimesNewRomanPSMT_TrueType");
byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
- Assert.assertEquals(is.length, 41352);
+ Assert.assertEquals(is.length, 41112);
doc.close();
doc2.close();
}