You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2016/07/01 19:46:29 UTC

svn commit: r1750999 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane: Stream.java StreamPane.java

Author: msahyoun
Date: Fri Jul  1 19:46:29 2016
New Revision: 1750999

URL: http://svn.apache.org/viewvc?rev=1750999&view=rev
Log:
PDFBOX-3397: use UTF-8 when reading XML Metadata instead of ISO-8859-1

Modified:
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java?rev=1750999&r1=1750998&r2=1750999&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/Stream.java Fri Jul  1 19:46:29 2016
@@ -45,6 +45,8 @@ public class Stream
     private final COSStream stream;
     private final boolean isThumb;
     private final boolean isImage;
+    private final boolean isXmlMetadata;
+    
     private final Map<String, List<String>> filters;
 
     /**
@@ -58,6 +60,7 @@ public class Stream
         this.stream = cosStream;
         this.isThumb = isThumb;
         this.isImage = isImageStream(cosStream, isThumb);
+        this.isXmlMetadata = isXmlMetadataStream(cosStream);
 
         filters = createFilterList(cosStream);
     }
@@ -71,6 +74,16 @@ public class Stream
     {
         return isImage;
     }
+    
+    /**
+     * Return if this is stream is an Metadata stream.
+     *
+     * @return true if this a metadata stream and false otherwise.
+     */
+    public boolean isXmlMetadata()
+    {
+        return isXmlMetadata;
+    }
 
     /**
      * Return the available filter list. Only "Unfiltered" is returned if there is no filter and in
@@ -229,4 +242,9 @@ public class Stream
         }
         return dic.containsKey(COSName.SUBTYPE) && dic.getCOSName(COSName.SUBTYPE).equals(COSName.IMAGE);
     }
+    
+    private boolean isXmlMetadataStream(COSDictionary dic)
+    {
+        return dic.containsKey(COSName.SUBTYPE) && dic.getCOSName(COSName.SUBTYPE).equals(COSName.getPDFName("XML"));
+    }
 }

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java?rev=1750999&r1=1750998&r2=1750999&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/streampane/StreamPane.java Fri Jul  1 19:46:29 2016
@@ -250,8 +250,13 @@ public class StreamPane implements Actio
         @Override
         protected StyledDocument doInBackground()
         {
+            // default encoding to use when reading text base content
+            String encoding = "ISO-8859-1";
             synchronized (stream)
             {
+                if (stream.isXmlMetadata()) {
+                    encoding = "UTF-8";
+                }
                 InputStream inputStream = stream.getStream(filterKey);
                 if (isContentStream && Stream.UNFILTERED.equals(filterKey))
                 {
@@ -260,9 +265,9 @@ public class StreamPane implements Actio
                     {
                         return document;
                     }
-                    return getDocument(stream.getStream(filterKey));
+                    return getDocument(stream.getStream(filterKey), encoding);
                 }
-                return getDocument(inputStream);
+                return getDocument(inputStream, encoding);
             }
         }
 
@@ -283,7 +288,7 @@ public class StreamPane implements Actio
             }
         }
 
-        private String getStringOfStream(InputStream ioStream)
+        private String getStringOfStream(InputStream ioStream, String encoding)
         {
             ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
             byte[] buffer = new byte[1024];
@@ -301,7 +306,7 @@ public class StreamPane implements Actio
             }
             try
             {
-                return byteArray.toString("ISO-8859-1");
+                return byteArray.toString(encoding);
             }
             catch (UnsupportedEncodingException e)
             {
@@ -310,12 +315,12 @@ public class StreamPane implements Actio
             }
         }
 
-        private StyledDocument getDocument(InputStream inputStream)
+        private StyledDocument getDocument(InputStream inputStream, String encoding)
         {
             StyledDocument docu = new DefaultStyledDocument();
             if (inputStream != null)
             {
-                String data = getStringOfStream(inputStream);
+                String data = getStringOfStream(inputStream, encoding);
                 try
                 {
                     docu.insertString(0, data, null);