You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2011/01/23 14:52:37 UTC
svn commit: r1062427 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font:
PDCIDFont.java PDFont.java PDType0Font.java
Author: lehmi
Date: Sun Jan 23 13:52:36 2011
New Revision: 1062427
URL: http://svn.apache.org/viewvc?rev=1062427&view=rev
Log:
PDFBOX-925: improved the CID encoding
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java?rev=1062427&r1=1062426&r2=1062427&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java Sun Jan 23 13:52:36 2011
@@ -305,7 +305,14 @@ public abstract class PDCIDFont extends
String cidSystemInfo = getCIDSystemInfo();
if (cidSystemInfo != null)
{
- cidSystemInfo = CMapSubstitution.substituteCMap( cidSystemInfo );
+ if (cidSystemInfo.contains("Identity"))
+ {
+ cidSystemInfo = "Identity-H";
+ }
+ else
+ {
+ cidSystemInfo = cidSystemInfo.substring(0,cidSystemInfo.lastIndexOf("-"))+"-UCS2";
+ }
cmap = cmapObjects.get( cidSystemInfo );
if (cmap == null)
{
@@ -335,18 +342,7 @@ public abstract class PDCIDFont extends
String result = null;
if (cmap != null)
{
- if (length == 1 && cmap.hasOneByteMappings())
- {
- result = cmap.lookup(c, offset, length);
- }
- else if (length == 2 && cmap.hasTwoByteMappings())
- {
- result = cmap.lookup(c, offset, length);
- }
- if (result == null && cmap.hasCIDMappings())
- {
- result = cmap.lookupCID(getCodeFromArray(c, offset, length));
- }
+ result = cmapEncoding(getCodeFromArray( c, offset, length ), length, true);
}
else
{
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=1062427&r1=1062426&r2=1062427&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 Sun Jan 23 13:52:36 2011
@@ -433,6 +433,28 @@ public abstract class PDFont implements
}
/**
+ * Encode the given value using the CMap of the font.
+ *
+ * @param code the code to encode.
+ * @param length the byte length of the given code.
+ * @param isCIDFont indicates that the used font is a CID font.
+ *
+ * @return The value of the encoded character.
+ */
+ protected String cmapEncoding( int code, int length, boolean isCIDFont ) throws IOException
+ {
+ String retval = null;
+ if (cmap != null)
+ {
+ retval = cmap.lookup(code, length);
+ if (retval == null && isCIDFont)
+ {
+ retval = cmap.lookupCID(code);
+ }
+ }
+ return retval;
+ }
+ /**
* This will perform the encoding of a character if needed.
*
* @param c The character to encode.
@@ -446,16 +468,10 @@ public abstract class PDFont implements
public String encode( byte[] c, int offset, int length ) throws IOException
{
String retval = null;
+ int code = getCodeFromArray( c, offset, length );
if( cmap != null )
{
- if (length == 1 && cmap.hasOneByteMappings())
- {
- retval = cmap.lookup( c, offset, length );
- }
- else if (length == 2 && cmap.hasTwoByteMappings())
- {
- retval = cmap.lookup( c, offset, length );
- }
+ retval = cmapEncoding(code, length, false);
}
// there is no cmap but probably an encoding with a suitable mapping
@@ -464,7 +480,7 @@ public abstract class PDFont implements
Encoding encoding = getFontEncoding();
if( encoding != null )
{
- retval = encoding.getCharacter( getCodeFromArray( c, offset, length ) );
+ retval = encoding.getCharacter( code );
}
if( retval == null && (cmap == null || length == 2))
{
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=1062427&r1=1062426&r2=1062427&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 Sun Jan 23 13:52:36 2011
@@ -179,8 +179,12 @@ public class PDType0Font extends PDSimpl
}
else
{
- // TODO additional mapping if not Identity
- return descendentFont.encode(c, offset, length);
+ int result = cmap.lookupCID(c, offset, length);
+ if (result != -1)
+ {
+ return descendentFont.cmapEncoding(result, 2, true);
+ }
+ return null;
}
}
}