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/27 03:16:01 UTC
svn commit: r1620772 - in /pdfbox/branches/no-awt:
fontbox/src/main/java/org/apache/fontbox/cff/
pdfbox/src/main/java/org/apache/pdfbox/util/
Author: jahewson
Date: Wed Aug 27 01:16:01 2014
New Revision: 1620772
URL: http://svn.apache.org/r1620772
Log:
PDFBOX-2262: Support CFF fonts with FontMatrix in wrong DICT
Modified:
pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java
pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java
pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
Modified: pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java?rev=1620772&r1=1620771&r2=1620772&view=diff
==============================================================================
--- pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java (original)
+++ pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java Wed Aug 27 01:16:01 2014
@@ -236,6 +236,21 @@ public class CFFCIDFont extends CFFFont
return type2;
}
+ @Override
+ public List<Number> getFontMatrix()
+ {
+ // some malformed CIDFonts have their FontMatrix in a Font DICT
+ if (fontDictionaries.size() > 0 && fontDictionaries.get(0).containsKey("FontMatrix"))
+ {
+ return (List<Number>)fontDictionaries.get(0).get("FontMatrix");
+ }
+ else
+ {
+ // but it should be in the Top DICT
+ return (List<Number>)topDict.get("FontMatrix");
+ }
+ }
+
/**
* Private implementation of Type1CharStringReader, because only CFFType1Font can
* expose this publicly, as CIDFonts only support this for legacy 'seac' commands.
Modified: pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java?rev=1620772&r1=1620771&r2=1620772&view=diff
==============================================================================
--- pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java (original)
+++ pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFFont.java Wed Aug 27 01:16:01 2014
@@ -31,7 +31,6 @@ import org.apache.fontbox.util.BoundingB
*/
public abstract class CFFFont
{
- // todo: can we avoid protected variables and make some of these final?
protected String fontName;
protected final Map<String, Object> topDict = new LinkedHashMap<String, Object>();
protected CFFCharset charset;
@@ -85,10 +84,7 @@ public abstract class CFFFont
/**
* Returns the FontMatrix.
*/
- public List<Number> getFontMatrix()
- {
- return (List<Number>)topDict.get("FontMatrix");
- }
+ public abstract List<Number> getFontMatrix();
/**
* Returns the FontBBox.
Modified: pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java?rev=1620772&r1=1620771&r2=1620772&view=diff
==============================================================================
--- pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java (original)
+++ pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cff/CFFType1Font.java Wed Aug 27 01:16:01 2014
@@ -78,6 +78,12 @@ public class CFFType1Font extends CFFFon
return gid != 0;
}
+ @Override
+ public List<Number> getFontMatrix()
+ {
+ return (List<Number>)topDict.get("FontMatrix");
+ }
+
/**
* Returns the Type 1 charstring for the given PostScript glyph name.
*
Modified: pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1620772&r1=1620771&r2=1620772&view=diff
==============================================================================
--- pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original)
+++ pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Wed Aug 27 01:16:01 2014
@@ -364,20 +364,16 @@ public class PDFStreamEngine
// Text or Disp to represent if the values are in text or disp units (no glyph units are
// saved).
- PDGraphicsState graphicsState = getGraphicsState();
+ PDGraphicsState state = getGraphicsState();
- final float fontSizeText = graphicsState.getTextState().getFontSize();
- final float horizontalScalingText = graphicsState.getTextState().getHorizontalScaling() / 100f;
- final float riseText = graphicsState.getTextState().getRise();
- final float wordSpacingText = graphicsState.getTextState().getWordSpacing();
- final float characterSpacingText = graphicsState.getTextState().getCharacterSpacing();
-
- // We won't know the actual number of characters until
- // we process the byte data(could be two bytes each) but
- // it won't ever be more than string.length*2(there are some cases
- // were a single byte will result in two output characters "fi"
+ final float fontSizeText = state.getTextState().getFontSize();
+ final float horizontalScalingText = state.getTextState().getHorizontalScaling() / 100f;
+ final float riseText = state.getTextState().getRise();
+ final float wordSpacingText = state.getTextState().getWordSpacing();
+ final float characterSpacingText = state.getTextState().getCharacterSpacing();
- PDFont font = graphicsState.getTextState().getFont();
+ // get the current font
+ PDFont font = state.getTextState().getFont();
if (font == null)
{
LOG.warn("No current font, will use default");
@@ -387,7 +383,8 @@ public class PDFStreamEngine
// all fonts have the width/height of a character in thousandths of a unit of text space
float fontMatrixXScaling = 1 / 1000f;
float fontMatrixYScaling = 1 / 1000f;
- // expect Type3 fonts, those are providing the width of a character in glyph space units
+
+ // except Type 3 fonts, those provide the width of a character in glyph space units
if (font instanceof PDType3Font)
{
Matrix fontMatrix = font.getFontMatrix();
@@ -400,7 +397,7 @@ public class PDFStreamEngine
textStateParameters.setValue(1, 1, fontSizeText);
textStateParameters.setValue(2, 1, riseText);
- Matrix ctm = getGraphicsState().getCurrentTransformationMatrix();
+ Matrix ctm = state.getCurrentTransformationMatrix();
Matrix textXctm = new Matrix();
Matrix textMatrixEnd = new Matrix();
Matrix td = new Matrix();