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/10/14 06:24:18 UTC
svn commit: r1631609 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font:
PDFont.java PDSimpleFont.java PDTrueTypeFont.java PDTrueTypeFontEmbedder.java
Author: jahewson
Date: Tue Oct 14 04:24:18 2014
New Revision: 1631609
URL: http://svn.apache.org/r1631609
Log:
PDFBOX-2422: Set font descriptor when embedding simple TTFs
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.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/PDTrueTypeFontEmbedder.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java?rev=1631609&r1=1631608&r2=1631609&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java Tue Oct 14 04:24:18 2014
@@ -52,8 +52,8 @@ public abstract class PDFont implements
protected final COSDictionary dict;
private final CMap toUnicodeCMap;
private final FontMetrics afmStandard14; // AFM for standard 14 fonts
- private final PDFontDescriptor fontDescriptor;
+ private PDFontDescriptor fontDescriptor;
private List<Integer> widths;
private float avgFontWidth;
private float fontWidthOfSpace = -1f;
@@ -145,6 +145,16 @@ public abstract class PDFont implements
}
/**
+ * Sets the font descriptor when embedding a font.
+ */
+ protected final void setFontDescriptor(PDFontDescriptor fontDescriptor)
+ {
+ this.fontDescriptor = fontDescriptor;
+ }
+
+ /**
+
+ /**
* Reads a CMap given a COS Stream or Name. May return null if a predefined CMap does not exist.
*
* @param base COSName or COSStream
@@ -243,19 +253,21 @@ public abstract class PDFont implements
/**
* Returns the width of the given Unicode string.
*
- * @param string The string to get the width of.
+ * @param text The text to get the width of.
* @return The width of the string in 1000 units of text space, ie 333 567...
* @throws IOException If there is an error getting the width information.
*/
- public float getStringWidth(String string) throws IOException
+ public float getStringWidth(String text) throws IOException
{
- byte[] data = string.getBytes("ISO-8859-1"); // todo: *no*, these are *not* character codes
- float totalWidth = 0;
- for (int i = 0; i < data.length; i++)
+ float width = 0;
+ int offset = 0, length = text.length();
+ while (offset < length)
{
- totalWidth += getWidth(data[i]);
+ int codePoint = text.codePointAt(offset);
+ offset += Character.charCount(codePoint);
+ width += getWidth(codePoint); // todo: *no* getWidth expects a PDF char code, not a Unicode code point
}
- return totalWidth;
+ return width;
}
/**
@@ -406,7 +418,7 @@ public abstract class PDFont implements
* Returns the value of the symbolic flag, allowing for the fact that the result may be
* indeterminate.
*/
- protected Boolean getSymbolicFlag()
+ protected final Boolean getSymbolicFlag()
{
if (getFontDescriptor() != null)
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java?rev=1631609&r1=1631608&r2=1631609&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java Tue Oct 14 04:24:18 2014
@@ -46,7 +46,7 @@ public abstract class PDSimpleFont exten
private final Set<Integer> noUnicode = new HashSet<Integer>(); // for logging
/**
- * Constructor
+ * Constructor for embedding.
*/
PDSimpleFont()
{
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=1631609&r1=1631608&r2=1631609&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 Oct 14 04:24:18 2014
@@ -178,8 +178,10 @@ public class PDTrueTypeFont extends PDSi
PDTrueTypeFontEmbedder embedder = new PDTrueTypeFontEmbedder(document, dict, ttfStream);
encoding = embedder.getFontEncoding();
ttf = embedder.getTrueTypeFont();
+ setFontDescriptor(embedder.getFontDescriptor());
isEmbedded = true;
isDamaged = false;
+ glyphList = GlyphList.getAdobeGlyphList();
}
@Override
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java?rev=1631609&r1=1631608&r2=1631609&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFontEmbedder.java Tue Oct 14 04:24:18 2014
@@ -58,6 +58,7 @@ class PDTrueTypeFontEmbedder
{
private final Encoding fontEncoding;
private final TrueTypeFont ttf;
+ private final PDFontDescriptor fontDescriptor;
/**
* Creates a new TrueType font for embedding.
@@ -94,6 +95,7 @@ class PDTrueTypeFontEmbedder
fd.setFontFile2(stream);
dict.setItem(COSName.FONT_DESC, fd);
+ fontDescriptor = fd;
}
// creates a new font descriptor dictionary for the given TTF
@@ -326,4 +328,12 @@ class PDTrueTypeFontEmbedder
{
return ttf;
}
+
+ /**
+ * Returns the font descriptor.
+ */
+ public PDFontDescriptor getFontDescriptor()
+ {
+ return fontDescriptor;
+ }
}