You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2018/02/07 18:47:11 UTC
svn commit: r1823513 - in
/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font:
PDCIDFont.java PDCIDFontType0.java PDCIDFontType2.java
Author: tilman
Date: Wed Feb 7 18:47:10 2018
New Revision: 1823513
URL: http://svn.apache.org/viewvc?rev=1823513&view=rev
Log:
PDFBOX-4093: use /CIDToGIDMap as suggested by Jani Pehkonen; remove unused code
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java?rev=1823513&r1=1823512&r2=1823513&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java Wed Feb 7 18:47:10 2018
@@ -17,6 +17,7 @@
package org.apache.pdfbox.pdmodel.font;
import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
@@ -26,6 +27,8 @@ import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.common.COSObjectable;
import org.apache.pdfbox.util.Matrix;
import org.apache.pdfbox.util.Vector;
@@ -370,4 +373,28 @@ public abstract class PDCIDFont implemen
* @throws IOException If the text could not be encoded.
*/
protected abstract byte[] encode(int unicode) throws IOException;
+
+ int[] readCIDToGIDMap() throws IOException
+ {
+ int[] cid2gid = null;
+ COSBase map = dict.getDictionaryObject(COSName.CID_TO_GID_MAP);
+ if (map instanceof COSStream)
+ {
+ COSStream stream = (COSStream) map;
+
+ InputStream is = stream.createInputStream();
+ byte[] mapAsBytes = IOUtils.toByteArray(is);
+ IOUtils.closeQuietly(is);
+ int numberOfInts = mapAsBytes.length / 2;
+ cid2gid = new int[numberOfInts];
+ int offset = 0;
+ for (int index = 0; index < numberOfInts; index++)
+ {
+ int gid = (mapAsBytes[offset] & 0xff) << 8 | mapAsBytes[offset + 1] & 0xff;
+ cid2gid[index] = gid;
+ offset += 2;
+ }
+ }
+ return cid2gid;
+ }
}
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java?rev=1823513&r1=1823512&r2=1823513&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType0.java Wed Feb 7 18:47:10 2018
@@ -62,6 +62,7 @@ public class PDCIDFontType0 extends PDCI
private Matrix fontMatrix;
private final AffineTransform fontMatrixTransform;
private BoundingBox fontBBox;
+ private int[] cid2gid = null;
/**
* Constructor.
@@ -119,6 +120,7 @@ public class PDCIDFontType0 extends PDCI
cidFont = null;
t1Font = cffFont;
}
+ cid2gid = readCIDToGIDMap();
isEmbedded = true;
isDamaged = false;
}
@@ -324,6 +326,11 @@ public class PDCIDFontType0 extends PDCI
public GeneralPath getPath(int code) throws IOException
{
int cid = codeToCID(code);
+ if (cid2gid != null && isEmbedded)
+ {
+ // PDFBOX-4093: despite being a type 0 font, there is a CIDToGIDMap
+ cid = cid2gid[cid];
+ }
Type2CharString charstring = getType2CharString(cid);
if (charstring != null)
{
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java?rev=1823513&r1=1823512&r2=1823513&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFontType2.java Wed Feb 7 18:47:10 2018
@@ -18,9 +18,6 @@ package org.apache.pdfbox.pdmodel.font;
import java.awt.geom.GeneralPath;
import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.fontbox.cff.Type2CharString;
@@ -31,11 +28,7 @@ import org.apache.fontbox.ttf.OTFParser;
import org.apache.fontbox.ttf.OpenTypeFont;
import org.apache.fontbox.ttf.TrueTypeFont;
import org.apache.fontbox.util.BoundingBox;
-import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.cos.COSStream;
-import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.util.Matrix;
@@ -211,44 +204,6 @@ public class PDCIDFontType2 extends PDCI
return ttf.getFontBBox();
}
- private int[] readCIDToGIDMap() throws IOException
- {
- int[] cid2gid = null;
- COSBase map = dict.getDictionaryObject(COSName.CID_TO_GID_MAP);
- if (map instanceof COSStream)
- {
- COSStream stream = (COSStream) map;
-
- InputStream is = stream.createInputStream();
- byte[] mapAsBytes = IOUtils.toByteArray(is);
- IOUtils.closeQuietly(is);
- int numberOfInts = mapAsBytes.length / 2;
- cid2gid = new int[numberOfInts];
- int offset = 0;
- for (int index = 0; index < numberOfInts; index++)
- {
- int gid = (mapAsBytes[offset] & 0xff) << 8 | mapAsBytes[offset + 1] & 0xff;
- cid2gid[index] = gid;
- offset += 2;
- }
- }
- return cid2gid;
- }
-
- private Map<Integer, Integer> invert(int[] cid2gid)
- {
- if (cid2gid == null)
- {
- return null;
- }
- Map<Integer, Integer> inverse = new HashMap<Integer, Integer>(cid2gid.length);
- for (int i = 0; i < cid2gid.length; i++)
- {
- inverse.put(cid2gid[i], i);
- }
- return inverse;
- }
-
@Override
public int codeToCID(int code)
{