DynamicPDF Generator for Java can create PDF documents that are marked as PDF/UA compatible. The goal of the PDF/UA standard is for everyone to be able to independently access information contained within a PDF document.
The following rules must be followed in order to make a Document PDF/UA compliant:
Below sample code generates a PDF/UA compliant PDF document.
[Java]
// Create a PDF Document
Document document = new Document();
// Set the TagOptions to document
TagOptions Tag = new TagOptions();
document.setTag(Tag);
// Create StructureElement objects and set Order etc.
StructureElement structureDocument = new StructureElement(TagType.getDocument());
StructureElement structureHeading = new StructureElement(TagType.getHeading());
StructureElement structureForm = new StructureElement(TagType.getForm());
structureHeading.setParent(structureDocument);
structureForm.setParent(structureDocument);
// Create AttributeObject objects with tag order and parents.
AttributeObject attrObjLayout = new AttributeObject(AttributeOwner.LAYOUT);
attrObjLayout.setPlacement(Placement.BLOCK);
structureForm.getAttributeLists().add(attrObjLayout);
StructureElement structureForm2 = new StructureElement(TagType.getForm());
structureForm2.setParent(structureDocument);
structureForm2.getAttributeLists().add(attrObjLayout);
StructureElement structureParagraph = new StructureElement(TagType.getParagraph());
structureParagraph.setParent(structureDocument);
StructureElement structureParagraph2 = new StructureElement(TagType.getParagraph());
structureParagraph2.setParent(structureDocument);
// Set Document Language
document.setLanguage("en-us");
document.getViewerPreferences().setDisplayDocTitle(true);
// Create a Page
Page page = new Page();
// Create a Label and set Tag
Label lblEnterName = new Label("EnterName:", 0, 100, 100, 50);
lblEnterName.setTag(structureParagraph);
Label lblAge = new Label("Age:", 0, 200, 100, 50);
lblAge.setTag(structureParagraph2);
// Create a TextField and set Tag
TextField txtField1 = new TextField("txt1", 100, 100, 100, 50);
TextField txtField2 = new TextField("txt2", 100, 200, 100, 50);
txtField1.setTag(structureForm);
txtField2.setTag(structureForm2);
// Create an OpenTypeFont object with Embed option and ToolTip
OpenTypeFont font = new OpenTypeFont("times.ttf");
font.setEmbed(true);
font.setSubset(false);
lblEnterName.setFont(font);
lblAge.setFont(font);
txtField1.setFont(font);
txtField1.setToolTip("Name");
txtField2.setFont(font);
txtField2.setToolTip("age");
// Add the Elements to the Page
page.getElements().add(lblEnterName);
page.getElements().add(txtField1);
page.getElements().add(lblAge);
page.getElements().add(txtField2);
// Add Page to the Document
document.getPages().add(page);
// Create an Xmp Metadata
XmpMetadata xmp = new XmpMetadata();
// Create a PdfUASchema and add to XMP matadata
PdfUASchema customSchema = new PdfUASchema();
xmp.addSchema(customSchema);
// Create DublinCoreSchema and set properties
DublinCoreSchema dc = xmp.getDublinCore();
dc.getTitle().addLang("en-us", "XMP");
dc.getTitle().setDefault("Title Text");
// Adding the XmpMatadata to the document
document.setXmpMetadata(xmp);
// Save the PDF document
document.draw("[outputPath]/output.pdf");