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/15 03:44:30 UTC
svn commit: r1645553 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java
Author: jahewson
Date: Mon Dec 15 02:44:30 2014
New Revision: 1645553
URL: http://svn.apache.org/r1645553
Log:
PDFBOX-2524: Adobe Reader requires well-formed CMaps
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java?rev=1645553&r1=1645552&r2=1645553&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ToUnicodeWriter.java Mon Dec 15 02:44:30 2014
@@ -63,7 +63,7 @@ final class ToUnicodeWriter
*/
public void add(int cid, String text)
{
- if ( cid < 0 || cid > 0xFFFF)
+ if (cid < 0 || cid > 0xFFFF)
{
throw new IllegalArgumentException("CID is not valid");
}
@@ -117,14 +117,17 @@ final class ToUnicodeWriter
int srcPrev = -1;
String dstPrev = null;
+ int srcCode1 = -1;
+
for (Map.Entry<Integer, String> entry : cidToUnicode.entrySet())
{
int cid = entry.getKey();
String text = entry.getValue();
- if (cid == srcPrev + 1 &&
- dstPrev.codePointCount(0, dstPrev.length()) == 1 &&
- text.codePointAt(0) == dstPrev.codePointAt(0) + 1)
+ if (cid == srcPrev + 1 && // CID must be last CID + 1
+ dstPrev.codePointCount(0, dstPrev.length()) == 1 && // no UTF-16 surrogates
+ text.codePointAt(0) == dstPrev.codePointAt(0) + 1 && // dstString must be prev + 1
+ dstPrev.codePointAt(0) + 1 <= 255 - (cid - srcCode1)) // increment last byte only
{
// extend range
srcTo.set(srcTo.size() - 1, cid);
@@ -132,6 +135,7 @@ final class ToUnicodeWriter
else
{
// begin range
+ srcCode1 = cid;
srcFrom.add(cid);
srcTo.add(cid);
dstString.add(text);