You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/08/05 21:24:58 UTC
svn commit: r1615983 - in /pdfbox/trunk:
fontbox/src/main/java/org/apache/fontbox/ttf/CMAPTable.java
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
Author: jahewson
Date: Tue Aug 5 19:24:57 2014
New Revision: 1615983
URL: http://svn.apache.org/r1615983
Log:
PDFBOX-2215: Search for symbol cmap too, in priority order
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPTable.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPTable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPTable.java?rev=1615983&r1=1615982&r2=1615983&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPTable.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPTable.java Tue Aug 5 19:24:57 2014
@@ -39,7 +39,7 @@ public class CMAPTable extends TTFTable
public static final int ENCODING_MAC_ROMAN = 0;
// Windows encodings
- public static final int ENCODING_WIN_SYMBOL = 0;
+ public static final int ENCODING_WIN_SYMBOL = 0; // Unicode, non-standard character set
public static final int ENCODING_WIN_UNICODE = 1;
public static final int ENCODING_WIN_SHIFT_JIS = 2;
public static final int ENCODING_WIN_BIG5 = 3;
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1615983&r1=1615982&r2=1615983&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java Tue Aug 5 19:24:57 2014
@@ -276,19 +276,26 @@ public class PDTrueTypeFont extends PDFo
CMAPTable cmapTable = ttf.getCMAP();
CMAPEncodingEntry[] cmaps = cmapTable.getCmaps();
- CMAPEncodingEntry uniMap = null;
- for (CMAPEncodingEntry cmap : cmaps)
+ CMAPEncodingEntry uniMap = getCmapSubtable(cmaps, CMAPTable.PLATFORM_UNICODE,
+ CMAPTable.ENCODING_UNICODE_2_0_FULL);
+ if (uniMap == null)
{
- if (cmap.getPlatformId() == CMAPTable.PLATFORM_UNICODE &&
- (cmap.getPlatformEncodingId() == CMAPTable.ENCODING_UNICODE_2_0_BMP ||
- cmap.getPlatformEncodingId() == CMAPTable.ENCODING_UNICODE_2_0_FULL))
- {
- uniMap = cmap;
- break;
- }
+ uniMap = getCmapSubtable(cmaps, CMAPTable.PLATFORM_UNICODE,
+ CMAPTable.ENCODING_UNICODE_2_0_BMP);
+ }
+ if (uniMap == null)
+ {
+ uniMap = getCmapSubtable(cmaps, CMAPTable.PLATFORM_WINDOWS,
+ CMAPTable.ENCODING_WIN_UNICODE);
+ }
+ if (uniMap == null)
+ {
+ // Microsoft's "Recommendations for OpenType Fonts" says that "Symbol" encoding
+ // actually means "Unicode, non-standard character set"
+ uniMap = getCmapSubtable(cmaps, CMAPTable.PLATFORM_WINDOWS,
+ CMAPTable.ENCODING_WIN_SYMBOL);
}
-
if (uniMap == null)
{
// there should always be a usable cmap, if this happens we haven't tried hard enough
@@ -366,6 +373,23 @@ public class PDTrueTypeFont extends PDFo
}
/**
+ * Returns the "cmap" subtable for the given platform and encoding, or null.
+ */
+ private CMAPEncodingEntry getCmapSubtable(CMAPEncodingEntry[] cmaps,
+ int platformId, int platformEncodingId)
+ {
+ for (CMAPEncodingEntry cmap : cmaps)
+ {
+ if (cmap.getPlatformId() == platformId &&
+ cmap.getPlatformEncodingId() == platformEncodingId)
+ {
+ return cmap;
+ }
+ }
+ return null;
+ }
+
+ /**
* Return the TTF font as TrueTypeFont.
*
* @return the TTF font