You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@pdfbox.apache.org by Vitaliy Kubay <ku...@gmail.com> on 2018/01/31 17:23:45 UTC

Parsing Metadata - User defined schema

I have created a custom metadata schema as follows.

// MyMetadata.java
public class MyMetadata extends XMPMetadata {

    public MyMetadata() {
        super();
    }

    public MySchema createAndAddMySchema() {
        MySchema schema = new MySchema(this);
        addSchema(schema);
        return schema;
    }

    public MySchema getMySchema() {
        return (MySchema) getSchema(MySchema.class);
    }
}

// MySchema.java
public class MySchema extends XMPSchema {
    public static final String NAMESPACE = "http://www.mydomain.com/";

    public MySchema(XMPMetadata parent) {
        super(parent, NAMESPACE, "userdefined");
    }

    public void setId(String id) {
        setTextPropertyValueAsSimple("id", id);
    }

    public String getId() {
        return getUnqualifiedTextPropertyValue("id");
    }

    // ......

}



Parsing Metadata - User defined schema

// main.kt
fun attachMetadata(...) {

    ...

    val lu = LayerUtility(wmdoc)
    val xobject = lu.importPageAsForm(wmdoc, wmpage)

    // attach metadata to the xobject
    val metadata = HYGMetadata()
    val hyg = metadata.createAndAddHYGSchema()
    hyg.watermarkId = "OverlayOverlay"

    val metadataStream = PDMetadata(outdoc)
    val serializer = XmpSerializer()
    val baos = ByteArrayOutputStream()

    serializer.serialize(metadata, baos, true)
    metadataStream.importXMPMetadata( baos.toByteArray() )
    xobject.cosObject.setItem(COSName.METADATA, metadataStream)

    println("Num pages: " + outdoc.numberOfPages)
    // draw the watermark on all pages
    for (i in 0 .. (outdoc.numberOfPages-1)) {
        println(i)
        val cspg = PDPageContentStream(outdoc, outdoc.getPage(i),
PDPageContentStream.AppendMode.APPEND, true)
        cspg.drawForm(xobject)
        cspg.close()
    }

    // Save and close
    inpdoc.close()
    outdoc.save(outputdoc)
    outdoc.close()
}