svn commit: r1781895 - in /xmlgraphics/fop-pdf-images/trunk: src/java/org/apache/fop/render/pdf/pdfbox/ test/java/org/apache/fop/render/pdf/

[email protected]
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Mon Feb  6 13:08:42 2017
New Revision: 1781895

URL: http://svn.apache.org/viewvc?rev=1781895&view=rev
Log:
FOP-2687: NPE for merge fonts in pdf with accessibility

Added:
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/FOPPDFSingleMultiByteFontTestCase.java   (with props)
Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java?rev=1781895&r1=1781894&r2=1781895&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/FOPPDFMultiByteFont.java Mon Feb  6 13:08:42 2017
@@ -72,6 +72,7 @@ public class FOPPDFMultiByteFont extends
         readFontBBox(fontData);
         setFontName(name);
         addFont(fontData);
+        notifyMapOperation();
     }
 
     public String addFont(COSDictionary fontData) throws IOException {

Added: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/FOPPDFSingleMultiByteFontTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/FOPPDFSingleMultiByteFontTestCase.java?rev=1781895&view=auto
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/FOPPDFSingleMultiByteFontTestCase.java (added)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/FOPPDFSingleMultiByteFontTestCase.java Mon Feb  6 13:08:42 2017
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fop.render.pdf;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.fontbox.cff.CFFFont;
+import org.apache.fontbox.cff.CFFParser;
+import org.apache.fontbox.type1.Type1Font;
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDResources;
+
+import org.apache.fop.render.pdf.pdfbox.FOPPDFMultiByteFont;
+import org.apache.fop.render.pdf.pdfbox.FOPPDFSingleByteFont;
+
+public class FOPPDFSingleMultiByteFontTestCase {
+    private COSDictionary getFont(PDDocument doc, String internalname) throws IOException {
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
+        PDResources sourcePageResources = page.getResources();
+        COSDictionary fonts = (COSDictionary)sourcePageResources.getCOSObject().getDictionaryObject(COSName.FONT);
+        return (COSDictionary) fonts.getDictionaryObject(internalname);
+    }
+
+    @Test
+    public void testCFF() throws Exception {
+        PDDocument doc = PDDocument.load(new File(PDFBoxAdapterTestCase.CFF1));
+        FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "R11"),
+                "MyriadPro-Regular_Type1f0encstdcs");
+
+        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("bracketright"));
+        Assert.assertTrue(!Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
+        Assert.assertTrue(!Arrays.toString(sbfont.getEncoding().getUnicodeCharMap()).contains("A"));
+        Assert.assertEquals(sbfont.mapChar('A'), 0);
+        Assert.assertEquals(sbfont.getWidths().length, 28);
+        Assert.assertEquals(sbfont.getFirstChar(), 87);
+        Assert.assertEquals(sbfont.getLastChar(), 114);
+
+        PDDocument doc2 = PDDocument.load(new File(PDFBoxAdapterTestCase.CFF2));
+        String name = sbfont.addFont(getFont(doc2, "R11"));
+        Assert.assertTrue(name.contains("MyriadPro"));
+
+        Assert.assertEquals(sbfont.getFontName(), "MyriadPro-Regular_Type1f0encstdcs");
+        Assert.assertEquals(sbfont.getEncodingName(), "WinAnsiEncoding");
+        Assert.assertEquals(sbfont.mapChar('W'), 'W');
+        String x = IOUtils.toString(sbfont.getInputStream());
+        Assert.assertTrue(x, x.contains("Adobe Systems"));
+        Assert.assertEquals(sbfont.getEncoding().getName(), "FOPPDFEncoding");
+        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
+        Assert.assertEquals(sbfont.getWidths().length, 65);
+        Assert.assertEquals(sbfont.getFirstChar(), 50);
+        Assert.assertEquals(sbfont.getLastChar(), 114);
+
+        Assert.assertEquals(sbfont.addFont(getFont(doc2, "R13")), null);
+
+        doc.close();
+        doc2.close();
+    }
+
+    @Test
+    public void testCFF2() throws Exception {
+        PDDocument doc = PDDocument.load(new File(PDFBoxAdapterTestCase.CFF3));
+        FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "T1_0"),
+                "Myriad_Pro_Type1f0encf1cs");
+        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("uni004E"));
+        Assert.assertEquals(sbfont.getFontName(), "Myriad_Pro_Type1f0encf1cs");
+        Assert.assertEquals(sbfont.getEncodingName(), null);
+        byte[] is = IOUtils.toByteArray(sbfont.getInputStream());
+
+        CFFParser p = new CFFParser();
+        CFFFont ff = p.parse(is).get(0);
+        Assert.assertEquals(ff.getName(), "MNEACN+Myriad_Pro");
+//        Assert.assertEquals(ff.getCharset().getEntries().get(0).getSID(), 391);
+
+        doc.close();
+    }
+
+    @Test
+    public void testTTCID() throws Exception {
+        PDDocument doc = PDDocument.load(new File(PDFBoxAdapterTestCase.TTCID1));
+        FOPPDFMultiByteFont mbfont = new FOPPDFMultiByteFont(getFont(doc, "C2_0"),
+                "ArialMT_Type0");
+        mbfont.addFont(getFont(doc, "C2_0"));
+        Assert.assertEquals(mbfont.mapChar('t'), 67);
+
+        PDDocument doc2 = PDDocument.load(new File(PDFBoxAdapterTestCase.TTCID2));
+        String name = mbfont.addFont(getFont(doc2, "C2_0"));
+        Assert.assertEquals(name, "ArialMT_Type0");
+        Assert.assertEquals(mbfont.getFontName(), "ArialMT_Type0");
+        byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
+        Assert.assertEquals(is.length, 38640);
+        doc.close();
+        doc2.close();
+    }
+
+    @Test
+    public void testTTSubset() throws Exception {
+        PDDocument doc = PDDocument.load(new File(PDFBoxAdapterTestCase.TTSubset1));
+        FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "R9"),
+                "TimesNewRomanPSMT_TrueType");
+        mbfont.addFont(getFont(doc, "R9"));
+//        Assert.assertEquals(mbfont.mapChar('t'), 116);
+
+        PDDocument doc2 = PDDocument.load(new File(PDFBoxAdapterTestCase.TTSubset2));
+        String name = mbfont.addFont(getFont(doc2, "R9"));
+        Assert.assertEquals(name, "TimesNewRomanPSMT_TrueType");
+        Assert.assertEquals(mbfont.getFontName(), "TimesNewRomanPSMT_TrueType");
+        byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
+        Assert.assertEquals(is.length, 41112);
+        doc.close();
+        doc2.close();
+    }
+
+    @Test
+    public void testType1Subset() throws Exception {
+        PDDocument doc = PDDocument.load(new File(PDFBoxAdapterTestCase.Type1Subset1));
+        FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "F15"), "");
+        mbfont.addFont(getFont(doc, "F15"));
+        PDDocument doc2 = PDDocument.load(new File(PDFBoxAdapterTestCase.Type1Subset2));
+        mbfont.addFont(getFont(doc2, "F15"));
+        Type1Font f = Type1Font.createWithPFB(mbfont.getInputStream());
+        Set<String> csDict = new TreeSet<String>(f.getCharStringsDict().keySet());
+        Assert.assertEquals(csDict.toString(), "[.notdef, a, d, e, hyphen, l, m, n, p, s, space, t, two, x]");
+        Assert.assertEquals(f.getSubrsArray().size(), 518);
+        Assert.assertEquals(f.getFamilyName(), "Verdana");
+        doc.close();
+        doc2.close();
+    }
+
+    @Test
+    public void testHadMappingOperations() throws IOException {
+        PDDocument pdf = PDDocument.load(new File(PDFBoxAdapterTestCase.TTCID1));
+        COSDictionary font = getFont(pdf, "C2_0");
+        font.removeItem(COSName.TO_UNICODE);
+        FOPPDFMultiByteFont multiByteFont = new FOPPDFMultiByteFont(font, null);
+        Assert.assertTrue(multiByteFont.hadMappingOperations());
+        pdf.close();
+    }
+}

Propchange: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/FOPPDFSingleMultiByteFontTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1781895&r1=1781894&r2=1781895&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java Mon Feb  6 13:08:42 2017
@@ -27,12 +27,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
 
 import org.junit.Test;
 
@@ -41,7 +38,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.fontbox.cff.CFFFont;
 import org.apache.fontbox.cff.CFFParser;
 import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.type1.Type1Font;
@@ -52,7 +48,6 @@ import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDResources;
 
 import org.apache.xmlgraphics.image.loader.ImageException;
 import org.apache.xmlgraphics.image.loader.ImageInfo;
@@ -77,8 +72,6 @@ import org.apache.fop.pdf.PDFGState;
 import org.apache.fop.pdf.PDFPage;
 import org.apache.fop.pdf.PDFResources;
 import org.apache.fop.pdf.PDFStream;
-import org.apache.fop.render.pdf.pdfbox.FOPPDFMultiByteFont;
-import org.apache.fop.render.pdf.pdfbox.FOPPDFSingleByteFont;
 import org.apache.fop.render.pdf.pdfbox.ImageConverterPDF2G2D;
 import org.apache.fop.render.pdf.pdfbox.ImagePDF;
 import org.apache.fop.render.pdf.pdfbox.PDFBoxAdapter;
@@ -92,19 +85,19 @@ import junit.framework.Assert;
 
 public class PDFBoxAdapterTestCase {
     private Rectangle2D r = new Rectangle2D.Double();
-    private static final String CFF1 = "test/resources/2fonts.pdf";
-    private static final String CFF2 = "test/resources/2fonts2.pdf";
-    private static final String CFF3 = "test/resources/simpleh.pdf";
-    private static final String TTCID1 = "test/resources/ttcid1.pdf";
-    private static final String TTCID2 = "test/resources/ttcid2.pdf";
-    private static final String TTSubset1 = "test/resources/ttsubset.pdf";
-    private static final String TTSubset2 = "test/resources/ttsubset2.pdf";
+    protected static final String CFF1 = "test/resources/2fonts.pdf";
+    protected static final String CFF2 = "test/resources/2fonts2.pdf";
+    protected static final String CFF3 = "test/resources/simpleh.pdf";
+    protected static final String TTCID1 = "test/resources/ttcid1.pdf";
+    protected static final String TTCID2 = "test/resources/ttcid2.pdf";
+    protected static final String TTSubset1 = "test/resources/ttsubset.pdf";
+    protected static final String TTSubset2 = "test/resources/ttsubset2.pdf";
     private static final String TTSubset3 = "test/resources/ttsubset3.pdf";
     private static final String TTSubset5 = "test/resources/ttsubset5.pdf";
     private static final String CFFCID1 = "test/resources/cffcid1.pdf";
     private static final String CFFCID2 = "test/resources/cffcid2.pdf";
-    private static final String Type1Subset1 = "test/resources/t1subset.pdf";
-    private static final String Type1Subset2 = "test/resources/t1subset2.pdf";
+    protected static final String Type1Subset1 = "test/resources/t1subset.pdf";
+    protected static final String Type1Subset2 = "test/resources/t1subset2.pdf";
     private static final String Type1Subset3 = "test/resources/t1subset3.pdf";
     private static final String Type1Subset4 = "test/resources/t1subset4.pdf";
     protected static final String ROTATE = "test/resources/rotate.pdf";
@@ -193,118 +186,6 @@ public class PDFBoxAdapterTestCase {
         return c;
     }
 
-    private COSDictionary getFont(PDDocument doc, String internalname) throws IOException {
-        PDPage page = doc.getDocumentCatalog().getPages().get(0);
-        PDResources sourcePageResources = page.getResources();
-        COSDictionary fonts = (COSDictionary)sourcePageResources.getCOSObject().getDictionaryObject(COSName.FONT);
-        return (COSDictionary) fonts.getDictionaryObject(internalname);
-    }
-
-    @Test
-    public void testCFF() throws Exception {
-        PDDocument doc = PDDocument.load(new File(CFF1));
-        FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "R11"),
-                "MyriadPro-Regular_Type1f0encstdcs");
-
-        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("bracketright"));
-        Assert.assertTrue(!Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
-        Assert.assertTrue(!Arrays.toString(sbfont.getEncoding().getUnicodeCharMap()).contains("A"));
-        Assert.assertEquals(sbfont.mapChar('A'), 0);
-        Assert.assertEquals(sbfont.getWidths().length, 28);
-        Assert.assertEquals(sbfont.getFirstChar(), 87);
-        Assert.assertEquals(sbfont.getLastChar(), 114);
-
-        PDDocument doc2 = PDDocument.load(new File(CFF2));
-        String name = sbfont.addFont(getFont(doc2, "R11"));
-        Assert.assertTrue(name.contains("MyriadPro"));
-
-        Assert.assertEquals(sbfont.getFontName(), "MyriadPro-Regular_Type1f0encstdcs");
-        Assert.assertEquals(sbfont.getEncodingName(), "WinAnsiEncoding");
-        Assert.assertEquals(sbfont.mapChar('W'), 'W');
-        String x = IOUtils.toString(sbfont.getInputStream());
-        Assert.assertTrue(x, x.contains("Adobe Systems"));
-        Assert.assertEquals(sbfont.getEncoding().getName(), "FOPPDFEncoding");
-        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
-        Assert.assertEquals(sbfont.getWidths().length, 65);
-        Assert.assertEquals(sbfont.getFirstChar(), 50);
-        Assert.assertEquals(sbfont.getLastChar(), 114);
-
-        Assert.assertEquals(sbfont.addFont(getFont(doc2, "R13")), null);
-
-        doc.close();
-        doc2.close();
-    }
-
-    @Test
-    public void testCFF2() throws Exception {
-        PDDocument doc = PDDocument.load(new File(CFF3));
-        FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "T1_0"),
-                "Myriad_Pro_Type1f0encf1cs");
-        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("uni004E"));
-        Assert.assertEquals(sbfont.getFontName(), "Myriad_Pro_Type1f0encf1cs");
-        Assert.assertEquals(sbfont.getEncodingName(), null);
-        byte[] is = IOUtils.toByteArray(sbfont.getInputStream());
-
-        CFFParser p = new CFFParser();
-        CFFFont ff = p.parse(is).get(0);
-        Assert.assertEquals(ff.getName(), "MNEACN+Myriad_Pro");
-//        Assert.assertEquals(ff.getCharset().getEntries().get(0).getSID(), 391);
-
-        doc.close();
-    }
-
-    @Test
-    public void testTTCID() throws Exception {
-        PDDocument doc = PDDocument.load(new File(TTCID1));
-        FOPPDFMultiByteFont mbfont = new FOPPDFMultiByteFont(getFont(doc, "C2_0"),
-                "ArialMT_Type0");
-        mbfont.addFont(getFont(doc, "C2_0"));
-        Assert.assertEquals(mbfont.mapChar('t'), 67);
-
-        PDDocument doc2 = PDDocument.load(new File(TTCID2));
-        String name = mbfont.addFont(getFont(doc2, "C2_0"));
-        Assert.assertEquals(name, "ArialMT_Type0");
-        Assert.assertEquals(mbfont.getFontName(), "ArialMT_Type0");
-        byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
-        Assert.assertEquals(is.length, 38640);
-        doc.close();
-        doc2.close();
-    }
-
-    @Test
-    public void testTTSubset() throws Exception {
-        PDDocument doc = PDDocument.load(new File(TTSubset1));
-        FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "R9"),
-                "TimesNewRomanPSMT_TrueType");
-        mbfont.addFont(getFont(doc, "R9"));
-//        Assert.assertEquals(mbfont.mapChar('t'), 116);
-
-        PDDocument doc2 = PDDocument.load(new File(TTSubset2));
-        String name = mbfont.addFont(getFont(doc2, "R9"));
-        Assert.assertEquals(name, "TimesNewRomanPSMT_TrueType");
-        Assert.assertEquals(mbfont.getFontName(), "TimesNewRomanPSMT_TrueType");
-        byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
-        Assert.assertEquals(is.length, 41112);
-        doc.close();
-        doc2.close();
-    }
-
-    @Test
-    public void testType1Subset() throws Exception {
-        PDDocument doc = PDDocument.load(new File(Type1Subset1));
-        FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "F15"), "");
-        mbfont.addFont(getFont(doc, "F15"));
-        PDDocument doc2 = PDDocument.load(new File(Type1Subset2));
-        mbfont.addFont(getFont(doc2, "F15"));
-        Type1Font f = Type1Font.createWithPFB(mbfont.getInputStream());
-        Set<String> csDict = new TreeSet<String>(f.getCharStringsDict().keySet());
-        Assert.assertEquals(csDict.toString(), "[.notdef, a, d, e, hyphen, l, m, n, p, s, space, t, two, x]");
-        Assert.assertEquals(f.getSubrsArray().size(), 518);
-        Assert.assertEquals(f.getFamilyName(), "Verdana");
-        doc.close();
-        doc2.close();
-    }
-
     @Test
     public void testStream() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.