svn commit: r1785316 - in /xmlgraphics/fop-pdf-images/trunk: src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java

[email protected]
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Fri Mar  3 14:59:17 2017
New Revision: 1785316

URL: http://svn.apache.org/viewvc?rev=1785316&view=rev
Log:
FOP-2698: NPE when page resource missing

Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.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/PDFBoxAdapter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java?rev=1785316&r1=1785315&r2=1785316&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java Fri Mar  3 14:59:17 2017
@@ -348,10 +348,10 @@ public class PDFBoxAdapter {
         if (pageNumbers.containsKey(targetPage.getPageIndex())) {
             pageNumbers.get(targetPage.getPageIndex()).set(0, targetPage.makeReference());
         }
-        PDResources sourcePageResources = page.getResources();
+        COSDictionary sourcePageResources = getResources(page);
         PDStream pdStream = getContents(page);
 
-        COSDictionary fonts = (COSDictionary)sourcePageResources.getCOSObject().getDictionaryObject(COSName.FONT);
+        COSDictionary fonts = (COSDictionary)sourcePageResources.getDictionaryObject(COSName.FONT);
         COSDictionary fontsBackup = null;
         UniqueName uniqueName = new UniqueName(key, sourcePageResources);
         String newStream = null;
@@ -375,8 +375,8 @@ public class PDFBoxAdapter {
 
         }
         pdStream = new PDStream(sourceDoc, new ByteArrayInputStream(newStream.getBytes("ISO-8859-1")));
-        mergeXObj(sourcePageResources.getCOSObject(), fontinfo, uniqueName);
-        PDFDictionary pageResources = (PDFDictionary)cloneForNewDocument(sourcePageResources.getCOSObject());
+        mergeXObj(sourcePageResources, fontinfo, uniqueName);
+        PDFDictionary pageResources = (PDFDictionary)cloneForNewDocument(sourcePageResources);
 
         PDFDictionary fontDict = (PDFDictionary)pageResources.get("Font");
         if (fontDict != null && pdfDoc.isMergeFontsEnabled()) {
@@ -392,9 +392,9 @@ public class PDFBoxAdapter {
                 }
             }
         }
-        updateXObj(sourcePageResources.getCOSObject(), pageResources);
+        updateXObj(sourcePageResources, pageResources);
         if (fontsBackup != null) {
-            sourcePageResources.getCOSObject().setItem(COSName.FONT, fontsBackup);
+            sourcePageResources.setItem(COSName.FONT, fontsBackup);
         }
 
         COSStream originalPageContents = pdStream.getCOSObject();
@@ -462,6 +462,14 @@ public class PDFBoxAdapter {
         return pdStream;
     }
 
+    private COSDictionary getResources(PDPage page) {
+        PDResources res = page.getResources();
+        if (res == null) {
+            return new COSDictionary();
+        }
+        return res.getCOSObject();
+    }
+
     private void mergeXObj(COSDictionary sourcePageResources, FontInfo fontinfo, UniqueName uniqueName)
         throws IOException {
         COSDictionary xobj = (COSDictionary) sourcePageResources.getDictionaryObject(COSName.XOBJECT);
@@ -515,7 +523,7 @@ public class PDFBoxAdapter {
         }
     }
 
-    private void transferPageDict(COSDictionary fonts, UniqueName uniqueName, PDResources sourcePageResources)
+    private void transferPageDict(COSDictionary fonts, UniqueName uniqueName, COSDictionary sourcePageResources)
         throws IOException {
         if (fonts != null) {
             for (Map.Entry<COSName, COSBase> f : fonts.entrySet()) {
@@ -523,7 +531,7 @@ public class PDFBoxAdapter {
                 targetPage.getPDFResources().addFont(name, (PDFDictionary)cloneForNewDocument(f.getValue()));
             }
         }
-        for (Map.Entry<COSName, COSBase> e : sourcePageResources.getCOSObject().entrySet()) {
+        for (Map.Entry<COSName, COSBase> e : sourcePageResources.entrySet()) {
             transferDict(e, uniqueName);
         }
     }

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java?rev=1785316&r1=1785315&r2=1785316&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/UniqueName.java Fri Mar  3 14:59:17 2017
@@ -25,15 +25,14 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
-import org.apache.pdfbox.pdmodel.PDResources;
 
 public class UniqueName {
     private String key;
     private List<COSName> resourceNames;
 
-    public UniqueName(String key, PDResources sourcePageResources) {
+    public UniqueName(String key, COSDictionary sourcePageResources) {
         this.key = Integer.toString(key.hashCode());
-        resourceNames = getResourceNames(sourcePageResources.getCOSObject());
+        resourceNames = getResourceNames(sourcePageResources);
     }
 
     protected String getName(COSName cn) {

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=1785316&r1=1785315&r2=1785316&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 Fri Mar  3 14:59:17 2017
@@ -460,4 +460,14 @@ public class PDFBoxAdapterTestCase {
         }
         Assert.assertTrue(msg.startsWith("Error on PDF page: " + ERROR));
     }
+
+    @Test
+    public void testNoPageResource() throws IOException {
+        PDDocument doc = PDDocument.load(new File(CFF1));
+        PDPage page = doc.getPage(0);
+        page.setResources(null);
+        AffineTransform at = new AffineTransform();
+        getPDFBoxAdapter(false).createStreamFromPDFBoxPage(doc, page, CFF1, at, new FontInfo(), new Rectangle());
+        doc.close();
+    }
 }
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.