You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by gb...@apache.org on 2014/06/20 22:58:41 UTC

svn commit: r1604276 - in /pdfbox/trunk/xmpbox/src: main/java/org/apache/xmpbox/xml/DomXmpParser.java test/java/org/apache/xmpbox/parser/DeserializationTest.java test/resources/validxmp/only_space_fields.xmp

Author: gbailleul
Date: Fri Jun 20 20:58:41 2014
New Revision: 1604276

URL: http://svn.apache.org/r1604276
Log:
PDFBOX-1995: Do not trim the text in a node if this text is the unique child of the node. Made some rework on removeComments. Test added

Added:
    pdfbox/trunk/xmpbox/src/test/resources/validxmp/only_space_fields.xmp
Modified:
    pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
    pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java

Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java?rev=1604276&r1=1604275&r2=1604276&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java (original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java Fri Jun 20 20:58:41 2014
@@ -125,7 +125,7 @@ public class DomXmpParser
         XMPMetadata xmp = null;
 
         // Start reading
-        removeComments(document.getFirstChild());
+        removeComments(document);
         Node node = document.getFirstChild();
 
         // expect xpacket processing instruction
@@ -716,37 +716,36 @@ public class DomXmpParser
     /**
      * Remove all the comments node in the parent element of the parameter
      * 
-     * @param node
+     * @param root
      *            the first node of an element or document to clear
      */
     private void removeComments(Node root)
     {
-        Node node = root;
-        while (node != null)
-        {
-            Node next = node.getNextSibling();
+        if (root.getChildNodes().getLength()<=1) {
+            // There is only one node so we do not remove it
+            return;
+        }
+        NodeList nl = root.getChildNodes();
+        for (int i=0; i < nl.getLength() ; i ++) {
+            Node node = nl.item(i);
             if (node instanceof Comment)
             {
                 // remove the comment
-                node.getParentNode().removeChild(node);
+                root.removeChild(node);
             }
             else if (node instanceof Text)
             {
-                Text t = (Text) node;
-                if (t.getTextContent().trim().length() == 0)
+                if (((Text)node).getTextContent().trim().length() == 0)
                 {
-                    // XXX is there a better way to remove useless Text ?
-                    node.getParentNode().removeChild(node);
+                        root.removeChild(node);
                 }
             }
             else if (node instanceof Element)
             {
                 // clean child
-                removeComments(node.getFirstChild());
+                removeComments(node);
             } // else do nothing
-            node = next;
         }
-        // end of document
     }
 
     private AbstractStructuredType instanciateStructured(TypeMapping tm, Types type, String name,

Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java?rev=1604276&r1=1604275&r2=1604276&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java (original)
+++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/parser/DeserializationTest.java Fri Jun 20 20:58:41 2014
@@ -340,4 +340,17 @@ public class DeserializationTest
 
     }
 
+    @Test
+    public void testSpaceTextValues () throws Exception {
+        // check values with spaces at start or end
+        // in this case, the value should not be trimmed
+        InputStream is = DomXmpParser.class.getResourceAsStream("/validxmp/only_space_fields.xmp");
+        DomXmpParser xdb = new DomXmpParser();
+        XMPMetadata meta = xdb.parse(is);
+        // check producer
+        Assert.assertEquals(" ", meta.getAdobePDFSchema().getProducer());
+        // check creator tool
+        Assert.assertEquals("Canon ",meta.getXMPBasicSchema().getCreatorTool());
+
+    }
 }

Added: pdfbox/trunk/xmpbox/src/test/resources/validxmp/only_space_fields.xmp
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/resources/validxmp/only_space_fields.xmp?rev=1604276&view=auto
==============================================================================
--- pdfbox/trunk/xmpbox/src/test/resources/validxmp/only_space_fields.xmp (added)
+++ pdfbox/trunk/xmpbox/src/test/resources/validxmp/only_space_fields.xmp Fri Jun 20 20:58:41 2014
@@ -0,0 +1,28 @@
+<!-- ! 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. ! -->
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/">
+    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+        <rdf:Description rdf:about="" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+            <xap:CreatorTool>Canon </xap:CreatorTool>
+            <xap:CreateDate>2014-01-23T20:09:45+01:00</xap:CreateDate>
+        </rdf:Description>
+        <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+            <pdf:Producer> </pdf:Producer>
+        </rdf:Description>
+        <rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">
+            <pdfaid:part>1</pdfaid:part>
+            <pdfaid:conformance>B</pdfaid:conformance>
+        </rdf:Description>
+    </rdf:RDF>
+</x:xmpmeta>
+<?xpacket end="w"?>
\ No newline at end of file