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/06/19 03:56:45 UTC
svn commit: r1603698 - in /pdfbox/trunk:
fontbox/src/main/java/org/apache/fontbox/ttf/
pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/
Author: jahewson
Date: Thu Jun 19 01:56:44 2014
New Revision: 1603698
URL: http://svn.apache.org/r1603698
Log:
PDFBOX-2149: Fix regression in PDFont and PDTrueTypeFont
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/CMAPTable.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/TTFGlyph2D.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.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=1603698&r1=1603697&r2=1603698&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 Thu Jun 19 01:56:44 2014
@@ -21,8 +21,7 @@ import java.io.IOException;
/**
* The CMAP table of a true type font.
*
- * @author Ben Litchfield (ben@benlitchfield.com)
- *
+ * @author Ben Litchfield
*/
public class CMAPTable extends TTFTable
{
@@ -31,49 +30,22 @@ public class CMAPTable extends TTFTable
*/
public static final String TAG = "cmap";
- /**
- * A constant for the platform.
- */
- public static final int PLATFORM_MISC = 0;
-
- /**
- * A constant for the platform.
- */
+ // platform
+ public static final int PLATFORM_UNICODE = 0;
public static final int PLATFORM_MACINTOSH = 1;
-
- /**
- * A constant for the platform.
- */
public static final int PLATFORM_WINDOWS = 3;
- /**
- * An encoding constant.
- */
- public static final int ENCODING_SYMBOL = 0;
- /**
- * An encoding constant.
- */
- public static final int ENCODING_UNICODE = 1;
- /**
- * An encoding constant.
- */
- public static final int ENCODING_SHIFT_JIS = 2;
- /**
- * An encoding constant.
- */
- public static final int ENCODING_BIG5 = 3;
- /**
- * An encoding constant.
- */
- public static final int ENCODING_PRC = 4;
- /**
- * An encoding constant.
- */
- public static final int ENCODING_WANSUNG = 5;
- /**
- * An encoding constant.
- */
- public static final int ENCODING_JOHAB = 6;
+ // Mac encodings
+ public static final int ENCODING_MAC_ROMAN = 0;
+
+ // Windows encodings
+ public static final int ENCODING_WIN_SYMBOL = 0;
+ 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;
+ public static final int ENCODING_WIN_PRC = 4;
+ public static final int ENCODING_WIN_WANSUNG = 5;
+ public static final int ENCODING_JWIN_OHAB = 6;
private CMAPEncodingEntry[] cmaps;
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/TTFGlyph2D.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/TTFGlyph2D.java?rev=1603698&r1=1603697&r2=1603698&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/TTFGlyph2D.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/TTFGlyph2D.java Thu Jun 19 01:56:44 2014
@@ -56,12 +56,7 @@ public class TTFGlyph2D implements Glyph
private String name;
private float scale = 1.0f;
private boolean hasScaling = false;
- private CMAPEncodingEntry cmapWinUnicode = null;
- private CMAPEncodingEntry cmapWinSymbol = null;
- private CMAPEncodingEntry cmapMacintoshSymbol = null;
- private boolean isSymbol = false;
private Map<Integer, GeneralPath> glyphs = new HashMap<Integer, GeneralPath>();
- private Encoding fontEncoding = null;
private CMap fontCMap = null;
private boolean isCIDFont = false;
private boolean hasIdentityCIDMapping = false;
@@ -103,55 +98,17 @@ public class TTFGlyph2D implements Glyph
scale = 1000f / header.getUnitsPerEm();
hasScaling = true;
}
- extractCmapTable();
extractFontSpecifics(pdFont, descFont);
}
/**
- * extract all useful "cmap" subtables.
- */
- private void extractCmapTable()
- {
- CMAPTable cmapTable = ttf.getCMAP();
- if (cmapTable != null)
- {
- // get all relevant "cmap" subtables
- CMAPEncodingEntry[] cmaps = cmapTable.getCmaps();
- for (CMAPEncodingEntry cmap : cmaps)
- {
- if (CMAPTable.PLATFORM_WINDOWS == cmap.getPlatformId())
- {
- if (CMAPTable.ENCODING_UNICODE == cmap.getPlatformEncodingId())
- {
- cmapWinUnicode = cmap;
- }
- else if (CMAPTable.ENCODING_SYMBOL == cmap.getPlatformEncodingId())
- {
- cmapWinSymbol = cmap;
- }
- }
- else if (CMAPTable.PLATFORM_MACINTOSH == cmap.getPlatformId())
- {
- if (CMAPTable.ENCODING_SYMBOL == cmap.getPlatformEncodingId())
- {
- cmapMacintoshSymbol = cmap;
- }
- }
- }
- }
-
- }
-
- /**
* Extract all font specific information.
*
* @param pdFont the given PDFont
*/
private void extractFontSpecifics(PDFont pdFont, PDCIDFontType2Font descFont)
{
- isSymbol = pdFont.isSymbolicFont();
name = pdFont.getBaseFont();
- fontEncoding = pdFont.getFontEncoding();
if (descFont != null)
{
isCIDFont = true;
@@ -520,13 +477,9 @@ public class TTFGlyph2D implements Glyph
@Override
public void dispose()
{
- cmapMacintoshSymbol = null;
- cmapWinSymbol = null;
- cmapWinUnicode = null;
ttf = null;
descendantFont = null;
fontCMap = null;
- fontEncoding = null;
if (glyphs != null)
{
glyphs.clear();
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=1603698&r1=1603697&r2=1603698&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 Thu Jun 19 01:56:44 2014
@@ -261,8 +261,7 @@ public class PDTrueTypeFont extends PDFo
{
if (cmap.getPlatformId() == CMAPTable.PLATFORM_WINDOWS)
{
- int platformEncoding = cmap.getPlatformEncodingId();
- if (CMAPTable.ENCODING_UNICODE == platformEncoding)
+ if (CMAPTable.ENCODING_WIN_UNICODE == cmap.getPlatformEncodingId())
{
uniMap = cmap;
break;
@@ -438,6 +437,7 @@ public class PDTrueTypeFont extends PDFo
LOG.error("Caught an exception getGlyhcode: " + exception);
}
}
+
if (getFontEncoding() == null || isSymbolicFont())
{
if (cmapWinSymbol != null)
@@ -470,6 +470,12 @@ public class PDTrueTypeFont extends PDFo
result = cmapMacintoshSymbol.getGlyphId(code);
}
}
+
+ if (result == 0)
+ {
+ LOG.warn("Can't map code " + code + " in font " + getBaseFont());
+ }
+
return result;
}
@@ -497,24 +503,24 @@ public class PDTrueTypeFont extends PDFo
{
// get all relevant "cmap" subtables
CMAPEncodingEntry[] cmaps = cmapTable.getCmaps();
- for (CMAPEncodingEntry cmap1 : cmaps)
+ for (CMAPEncodingEntry cmap : cmaps)
{
- if (CMAPTable.PLATFORM_WINDOWS == cmap1.getPlatformId())
+ if (CMAPTable.PLATFORM_WINDOWS == cmap.getPlatformId())
{
- if (CMAPTable.ENCODING_UNICODE == cmap1.getPlatformEncodingId())
+ if (CMAPTable.ENCODING_WIN_UNICODE == cmap.getPlatformEncodingId())
{
- cmapWinUnicode = cmap1;
+ cmapWinUnicode = cmap;
}
- else if (CMAPTable.ENCODING_SYMBOL == cmap1.getPlatformEncodingId())
+ else if (CMAPTable.ENCODING_WIN_SYMBOL == cmap.getPlatformEncodingId())
{
- cmapWinSymbol = cmap1;
+ cmapWinSymbol = cmap;
}
}
- else if (CMAPTable.PLATFORM_MACINTOSH == cmap1.getPlatformId())
+ else if (CMAPTable.PLATFORM_MACINTOSH == cmap.getPlatformId())
{
- if (CMAPTable.ENCODING_SYMBOL == cmap1.getPlatformEncodingId())
+ if (CMAPTable.ENCODING_MAC_ROMAN == cmap.getPlatformEncodingId())
{
- cmapMacintoshSymbol = cmap1;
+ cmapMacintoshSymbol = cmap;
}
}
}
@@ -529,6 +535,7 @@ public class PDTrueTypeFont extends PDFo
cmapWinUnicode = null;
cmapWinSymbol = null;
cmapMacintoshSymbol = null;
+ cmapInitialized = false;
ttf = null;
if (advanceWidths != null)
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java?rev=1603698&r1=1603697&r2=1603698&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java Thu Jun 19 01:56:44 2014
@@ -41,8 +41,7 @@ public class PDType0Font extends PDFont
{
private static final Log LOG = LogFactory.getLog(PDType0Font.class);
- private COSArray descendantFontArray;
- private PDFont descendantFont;
+ private PDCIDFont descendantFont;
private COSDictionary descendantFontDictionary;
/**
@@ -53,12 +52,13 @@ public class PDType0Font extends PDFont
public PDType0Font(COSDictionary fontDictionary)
{
super(fontDictionary);
- descendantFontDictionary = (COSDictionary) getDescendantFonts().getObject(0);
+ COSArray descendantFonts = (COSArray)dict.getDictionaryObject(COSName.DESCENDANT_FONTS);
+ descendantFontDictionary = (COSDictionary)descendantFonts.getObject(0);
if (descendantFontDictionary != null)
{
try
{
- descendantFont = PDFontFactory.createFont(descendantFontDictionary);
+ descendantFont = (PDCIDFont)PDFontFactory.createFont(descendantFontDictionary);
}
catch (IOException exception)
{
@@ -67,13 +67,20 @@ public class PDType0Font extends PDFont
}
}
- private COSArray getDescendantFonts()
+ /**
+ * Returns the descendant font.
+ *
+ * @return the descendant font.
+ */
+ public PDCIDFont getDescendantFont()
{
- if (descendantFontArray == null)
- {
- descendantFontArray = (COSArray) dict.getDictionaryObject(COSName.DESCENDANT_FONTS);
- }
- return descendantFontArray;
+ return descendantFont;
+ }
+
+ @Override
+ public PDFontDescriptor getFontDescriptor()
+ {
+ return descendantFont.getFontDescriptor();
}
@Override
@@ -226,21 +233,10 @@ public class PDType0Font extends PDFont
return retval;
}
- /**
- * Returns the descendant font.
- *
- * @return the descendant font.
- */
- public PDFont getDescendantFont()
- {
- return descendantFont;
- }
-
@Override
public void clear()
{
super.clear();
- descendantFontArray = null;
if (descendantFont != null)
{
descendantFont.clear();