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 2022/08/06 03:57:34 UTC

svn commit: r1903247 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java

Author: tilman
Date: Sat Aug  6 03:57:34 2022
New Revision: 1903247

URL: http://svn.apache.org/viewvc?rev=1903247&view=rev
Log:
PDFBOX-5488: get ColorSpaceType name from javax_imageio_1.0

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1903247&r1=1903246&r2=1903247&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Sat Aug  6 03:57:34 2022
@@ -31,6 +31,9 @@ import javax.imageio.ImageReader;
 import javax.imageio.metadata.IIOMetadata;
 import javax.imageio.metadata.IIOMetadataNode;
 import javax.imageio.stream.ImageInputStream;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -51,6 +54,21 @@ final class DCTFilter extends Filter
     private static final int POS_TRANSFORM = 11;
     private static final String ADOBE = "Adobe";
 
+    private static XPathExpression xPathExpression;
+
+    static
+    {
+        try
+        {
+            xPathExpression = XPathFactory.newInstance().newXPath().compile("Chroma/ColorSpaceType/@name");
+        }
+        catch (XPathExpressionException ex)
+        {
+            // shouldn't happen unless you changed the expression
+            LOG.error(ex.getMessage(), ex);
+        }
+    }
+
     @Override
     public DecodeResult decode(InputStream encoded, OutputStream decoded, COSDictionary
             parameters, int index, DecodeOptions options) throws IOException
@@ -180,6 +198,24 @@ final class DCTFilter extends Filter
             Element adobe = (Element) app14AdobeNodeList.item(0);
             return Integer.parseInt(adobe.getAttribute("transform"));
         }
+
+        // PDFBOX-5488: plan B: use ColorSpaceType from the other metadata tree.
+        try
+        {
+            String value = xPathExpression.evaluate(metadata.getAsTree("javax_imageio_1.0"));
+            if ("YCbCr".equals(value))
+            {
+                return 1;
+            }
+            if ("YCCK".equals(value))
+            {
+                return 2;
+            }
+        }
+        catch (XPathExpressionException ex)
+        {
+            return 0;
+        }
         return 0;
     }