Author: tilman
Date: Sun Dec 7 11:30:19 2025
New Revision: 1930324
Log:
PDFBOX-3882: add test + test file
Added:
pdfbox/branches/3.0/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml
(contents, props changed)
Modified:
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Modified:
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
==============================================================================
---
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Sun Dec 7 11:30:14 2025 (r1930323)
+++
pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/xml/DomXmpParserTest.java
Sun Dec 7 11:30:19 2025 (r1930324)
@@ -24,12 +24,17 @@ package org.apache.xmpbox.xml;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
+import java.util.List;
import org.apache.xmpbox.XMPMetadata;
import org.apache.xmpbox.schema.XMPMediaManagementSchema;
+import org.apache.xmpbox.schema.XMPSchema;
import org.apache.xmpbox.schema.XMPageTextSchema;
+import org.apache.xmpbox.type.AbstractField;
import org.apache.xmpbox.type.ArrayProperty;
+import org.apache.xmpbox.type.DefinedStructuredType;
import org.apache.xmpbox.type.DimensionsType;
+import org.apache.xmpbox.type.PDFASchemaType;
import org.apache.xmpbox.type.ResourceEventType;
import org.apache.xmpbox.type.ResourceRefType;
@@ -269,4 +274,35 @@ class DomXmpParserTest
Assertions.assertEquals("DimensionsType{4.0 x 3.0 inch}",
dim.toString());
Assertions.assertEquals("[NPages=IntegerType:7]",
pageTextSchema.getProperty(XMPageTextSchema.N_PAGES).toString());
}
+
+
+ /**
+ * PDFBOX-3882: Test attributes being used as properties to define an
extension schema. Also
+ * verify the content of the actual extension schema.
+ *
+ * @throws IOException
+ * @throws XmpParsingException
+ */
+ @Test
+ void testPDFBox3882() throws IOException, XmpParsingException
+ {
+ try (InputStream is =
DomXmpParser.class.getResourceAsStream("/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml"))
+ {
+ DomXmpParser dxp = new DomXmpParser();
+ dxp.setStrictParsing(false);
+ XMPMetadata xmp = dxp.parse(is);
+ List<AbstractField> allProperties =
xmp.getPDFExtensionSchema().getSchemasProperty().getAllProperties();
+ Assertions.assertEquals(1, allProperties.size());
+ PDFASchemaType pdfExtensionSchema = (PDFASchemaType)
allProperties.get(0);
+
Assertions.assertEquals("http://www.sagemcom.com/documents/xmlns/dematbox",
pdfExtensionSchema.getNamespaceURI());
+ Assertions.assertEquals("dematbox",
pdfExtensionSchema.getPrefixValue());
+ XMPSchema extensionSchema =
xmp.getSchema(pdfExtensionSchema.getNamespaceURI());
+ Assertions.assertEquals(pdfExtensionSchema.getNamespaceURI(),
extensionSchema.getNamespace());
+ Assertions.assertEquals(pdfExtensionSchema.getPrefixValue(),
extensionSchema.getPrefix());
+ ArrayProperty pageInfoProp = (ArrayProperty)
extensionSchema.getProperty("PageInfo");
+ DefinedStructuredType dst = (DefinedStructuredType)
pageInfoProp.getAllProperties().get(0);
+ Assertions.assertEquals("[number=IntegerType:1]",
dst.getProperty("number").toString());
+ Assertions.assertEquals("[origNumber=IntegerType:1]",
dst.getProperty("origNumber").toString());
+ }
+ }
}
Added:
pdfbox/branches/3.0/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++
pdfbox/branches/3.0/xmpbox/src/test/resources/org/apache/xmpbox/xml/PDFBOX-3882-dematbox.xml
Sun Dec 7 11:30:19 2025 (r1930324)
@@ -0,0 +1,7 @@
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta
xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'><rdf:RDF
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
xmlns:iX='http://ns.adobe.com/iX/1.0/'><rdf:Description
xmlns:dc='http://purl.org/dc/elements/1.1/'
rdf:about=''><dc:title><rdf:Alt><rdf:li
xml:lang="x-default">Dematbox_DocId=365899</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator></rdf:Description><rdf:Description
xmlns:xmp='http://ns.adobe.com/xap/1.0/'
rdf:about=''><xmp:CreatorTool>CrystalImage</xmp:CreatorTool><xmp:CreateDate>2017-07-24T10:18:18+00:00</xmp:CreateDate></rdf:Description><rdf:Description
xmlns:pdf='http://ns.adobe.com/pdf/1.3/'
rdf:about=''><pdf:Producer>CrystalImage v 2.24.01 (20170717) (Leht3 v.
9.1-ansic)(r=300,q=50,docfmt=pdf,crp,ibpd,frcdstr)</pdf:Producer></rdf:Description><rdf:Description
rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/' pdfaid:part='1'
pdfaid:con
formance='B'/><rdf:Description rdf:about=""
xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/"
xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#"
xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#"
xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#"
xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#"> <pdfaExtension:schemas>
<rdf:Bag> <rdf:li rdf:parseType="Resource">
<pdfaSchema:namespaceURI>http://www.sagemcom.com/documents/xmlns/dematbox</pdfaSchema:namespaceURI>
<pdfaSchema:prefix>dematbox</pdfaSchema:prefix> <pdfaSchema:property>
<rdf:Seq> <rdf:li rdf:parseType="Resource" pdfaProperty:name="PageInfo"
pdfaProperty:valueType="seq PageInfo" pdfaProperty:category="internal"
pdfaProperty:description="page information"/> </rdf:Seq> </pdfaSchema:property>
<pdfaSchema:valueType> <rdf:Seq> <rdf:li rdf:parseType="Resource"
pdfaType:type="PageInfo"
pdfaType:namespaceURI="http://www.sagemcom.com/documents/xmlns/dematbox/PageInfo"
pdfaType:prefix="PageInfo" pdfaType:des
cription="page information"> <pdfaType:field> <rdf:Seq> <rdf:li
rdf:parseType="Resource" pdfaField:name="number" pdfaField:valueType="Integer"
pdfaField:description="Page number."/> <rdf:li rdf:parseType="Resource"
pdfaField:name="origNumber" pdfaField:valueType="Integer"
pdfaField:description="Page number in the original document."/> <rdf:li
rdf:parseType="Resource" pdfaField:name="isCgv" pdfaField:valueType="Boolean"
pdfaField:description="Was the page detected as CGV?"/> <rdf:li
rdf:parseType="Resource" pdfaField:name="barcodeValue"
pdfaField:valueType="Text" pdfaField:description="Was a barcode found in the
page?"/> </rdf:Seq> </pdfaType:field> </rdf:li> </rdf:Seq>
</pdfaSchema:valueType> </rdf:li> </rdf:Bag> </pdfaExtension:schemas>
</rdf:Description><rdf:Description
xmlns:dematbox="http://www.sagemcom.com/documents/xmlns/dematbox" rdf:about="">
+ <dematbox:PageInfo
xmlns:PageInfo="http://www.sagemcom.com/documents/xmlns/dematbox/PageInfo">
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource" PageInfo:number="1"
PageInfo:origNumber="1"/>
+ </rdf:Seq>
+ </dematbox:PageInfo>
+</rdf:Description></rdf:RDF></x:xmpmeta><?xpacket end='w'?>
\ No newline at end of file