You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2015/10/09 20:11:20 UTC
svn commit: r1707779 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
Author: msahyoun
Date: Fri Oct 9 18:11:20 2015
New Revision: 1707779
URL: http://svn.apache.org/viewvc?rev=1707779&view=rev
Log:
PDFBOX-3016: initial support for encode()
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java?rev=1707779&r1=1707778&r2=1707779&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java Fri Oct 9 18:11:20 2015
@@ -17,6 +17,8 @@
package org.apache.pdfbox.pdmodel.font;
+import static org.apache.pdfbox.pdmodel.font.UniUtil.getUniNameOfCodePoint;
+
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
@@ -280,9 +282,21 @@ public class PDType1CFont extends PDSimp
@Override
protected byte[] encode(int unicode) throws IOException
{
- throw new UnsupportedOperationException("Not implemented: Type1C");
- }
+ String name = getGlyphList().codePointToName(unicode);
+ String nameInFont = getNameInFont(name);
+
+ Map<String, Integer> inverted = getInvertedEncoding();
+
+ if (nameInFont.equals(".notdef") || !genericFont.hasGlyph(nameInFont))
+ {
+ throw new IllegalArgumentException(
+ String.format("No glyph for U+%04X in font %s", unicode, getName()));
+ }
+ int code = inverted.get(name);
+ return new byte[] { (byte)code };
+ }
+
@Override
public float getStringWidth(String string) throws IOException
{
@@ -322,4 +336,30 @@ public class PDType1CFont extends PDSimp
// todo: not implemented, highly suspect
return 500;
}
+
+ /**
+ * Maps a PostScript glyph name to the name in the underlying font, for example when
+ * using a TTF font we might map "W" to "uni0057".
+ */
+ private String getNameInFont(String name) throws IOException
+ {
+ if (isEmbedded() || genericFont.hasGlyph(name))
+ {
+ return name;
+ }
+ else
+ {
+ // try unicode name
+ String unicodes = getGlyphList().toUnicode(name);
+ if (unicodes != null && unicodes.length() == 1)
+ {
+ String uniName = getUniNameOfCodePoint(unicodes.codePointAt(0));
+ if (genericFont.hasGlyph(uniName))
+ {
+ return uniName;
+ }
+ }
+ }
+ return ".notdef";
+ }
}