[ 
https://issues.apache.org/jira/browse/PDFBOX-5375?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17505254#comment-17505254
 ] 

Andreas Lehmkühler commented on PDFBOX-5375:
--------------------------------------------

How about something like this
{code}
### Eclipse Workspace Patch 1.0
#P pdfbox
Index: 
src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
===================================================================
--- src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java  
(Revision 1898440)
+++ src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java  
(Arbeitskopie)
@@ -79,6 +79,8 @@
 
     // initialize to MAX_VALUE as we prefer lower subsampling when 
keeping/replacing cache.
     private int cachedImageSubsampling = Integer.MAX_VALUE;
+    // indicates wether this image has an JPX-based filter applied
+    private boolean hasJPXFilter = false;
 
     /**
      * current resource dictionary (has color spaces)
@@ -142,12 +144,7 @@
         List<COSName> filters = stream.getFilters();
         if (!filters.isEmpty() && 
COSName.JPX_DECODE.equals(filters.get(filters.size() - 1)))
         {
-            try (COSInputStream is = stream.createInputStream())
-            {
-                DecodeResult decodeResult = is.getDecodeResult();
-                stream.getCOSObject().addAll(decodeResult.getParameters());
-                this.colorSpace = decodeResult.getJPXColorSpace();
-            }
+            hasJPXFilter = true;
         }
     }
 
@@ -780,6 +777,17 @@
     {
         if (colorSpace == null)
         {
+            if (hasJPXFilter)
+            {
+                PDStream stream = getStream();
+                try (COSInputStream is = stream.createInputStream())
+                {
+                    DecodeResult decodeResult = is.getDecodeResult();
+                    stream.getCOSObject().addAll(decodeResult.getParameters());
+                    colorSpace = decodeResult.getJPXColorSpace();
+                    return colorSpace;
+                }
+            }
             COSBase cosBase = getCOSObject().getItem(COSName.COLORSPACE, 
COSName.CS);
             if (cosBase != null)
             {
{code}

> Allow creating of PDFXObjectImage without accessing to the image stream
> -----------------------------------------------------------------------
>
>                 Key: PDFBOX-5375
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5375
>             Project: PDFBox
>          Issue Type: Bug
>          Components: PDModel
>    Affects Versions: 2.0.25, 3.0.0 PDFBox
>            Reporter: Thomas Ledoux
>            Priority: Major
>         Attachments: patch.txt, patch2.txt
>
>
> Currently, when a PDF embeds JPEG2000 images, the simple parsing of the file 
> generates a warning
> when the code hits a call to getXObject(name) from a PDResources for a image 
> without creating the
> underlining PDFXObjectImage object, related to the absence of the JAI 
> third-party.
> However, when we just want to access the width or height propertis (which are 
> defined outside the stream in the associated dictionnary).
> Looking at the constructor of PDFXObjectImage, it appears that the image is 
> always read to retrieve the colorspace.
> The proposed patch is moved this initialization to the getColorSpace() method 
> so that the object is created and the Exception will be raised only if the 
> image needs to be really accessed.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to