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/12/12 22:43:00 UTC
svn commit: r1645080 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font:
PDTrueTypeFont.java PDTrueTypeFontEmbedder.java
Author: jahewson
Date: Fri Dec 12 21:43:00 2014
New Revision: 1645080
URL: http://svn.apache.org/r1645080
Log:
PDFBOX-922: Cleanly limit PDTrueTypeFont to WinAnsiEncoding
Modified:
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/PDTrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1645080&r1=1645079&r2=1645080&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 Fri Dec 12 21:43:00 2014
@@ -249,9 +249,10 @@ public class PDTrueTypeFont extends PDSi
@Override
protected byte[] encode(int unicode) throws IOException
{
- if (unicode > 0xff)
+ if (!getEncoding().contains(getGlyphList().codePointToName(unicode)))
{
- throw new IllegalArgumentException("This font type only supports 8-bit code points");
+ throw new IllegalArgumentException(
+ String.format("U+%04X is not available in this font's Encoding", unicode));
}
int gid = codeToGID(unicode);
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=1645080&r1=1645079&r2=1645080&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 Fri Dec 12 21:43:00 2014
@@ -57,7 +57,8 @@ final class PDTrueTypeFontEmbedder exten
dict.setItem(COSName.SUBTYPE, COSName.TRUE_TYPE);
// only support WinAnsiEncoding encoding right now
- Encoding encoding = new WinAnsiEncoding(); // fixme: read encoding from TTF
+ Encoding encoding = new WinAnsiEncoding();
+ GlyphList glyphList = GlyphList.getAdobeGlyphList();
this.fontEncoding = encoding;
dict.setItem(COSName.ENCODING, encoding.getCOSObject());
@@ -65,13 +66,13 @@ final class PDTrueTypeFontEmbedder exten
dict.setItem(COSName.FONT_DESC, fontDescriptor);
// set the glyph widths
- setWidths(dict);
+ setWidths(dict, glyphList);
}
/**
* Sets the glyph widths in the font dictionary.
*/
- private void setWidths(COSDictionary font) throws IOException
+ private void setWidths(COSDictionary font, GlyphList glyphList) throws IOException
{
float scaling = 1000f / ttf.getHeader().getUnitsPerEm();
@@ -107,8 +108,7 @@ final class PDTrueTypeFontEmbedder exten
// pdf code to unicode by glyph list.
if (!name.equals(".notdef"))
{
- // todo: we're supposed to use the 'provided font encoding'
- String c = GlyphList.getAdobeGlyphList().toUnicode(name);
+ String c = glyphList.toUnicode(name);
int charCode = c.codePointAt(0);
int gid = cmap.getGlyphId(charCode);
if (gid != 0)