On 19.12.2023 00:24, CowwoC wrote:
I'm going to need to do something like this in the near future. Are there
any good samples or documentation I can look at for this use-use?
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.transform.TransformerException;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.pdmodel.common.PDMetadata;
import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent;
import org.apache.xmpbox.XMPMetadata;
import org.apache.xmpbox.schema.DublinCoreSchema;
import org.apache.xmpbox.schema.PDFAIdentificationSchema;
import org.apache.xmpbox.schema.XMPBasicSchema;
import org.apache.xmpbox.type.BadFieldValueException;
import org.apache.xmpbox.xml.XmpSerializer;
public final class ConvertToPDFA
{
private ConvertToPDFA()
{
}
public static void main(String[] args) throws IOException,
TransformerException
{
String file = "XXXX\\testme1.pdf";
String file2 = "XXXX\\testme1-pdfa.pdf";
try (PDDocument doc = Loader.loadPDF(new File(file)))
{
doc.setVersion(1.4f);
// add XMP metadata
XMPMetadata xmp = XMPMetadata.createXMPMetadata();
try
{
DublinCoreSchema dc = xmp.createAndAddDublinCoreSchema();
dc.setTitle(file);
PDFAIdentificationSchema id =
xmp.createAndAddPDFAIdentificationSchema();
id.setPart(1);
id.setConformance("B");
PDDocumentInformation info = new PDDocumentInformation();
info.setCreator("PDFBox");
XMPBasicSchema basicSchema =
xmp.createAndAddXMPBasicSchema();
basicSchema.setCreatorTool("PDFBox");
XmpSerializer serializer = new XmpSerializer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.serialize(xmp, baos, true);
PDMetadata metadata = new PDMetadata(doc);
metadata.importXMPMetadata(baos.toByteArray());
doc.getDocumentCatalog().setMetadata(metadata);
doc.setDocumentInformation(info);
}
catch (BadFieldValueException e)
{
// won't happen here, as the provided value is valid
throw new IllegalArgumentException(e);
}
// sRGB output intent
InputStream colorProfile =
ConvertToPDFA.class.getResourceAsStream(
"/org/apache/pdfbox/resources/pdfa/sRGB.icc");
PDOutputIntent intent = new PDOutputIntent(doc, colorProfile);
intent.setInfo("sRGB IEC61966-2.1");
intent.setOutputCondition("sRGB IEC61966-2.1");
intent.setOutputConditionIdentifier("sRGB IEC61966-2.1");
intent.setRegistryName("http://www.color.org");
doc.getDocumentCatalog().addOutputIntent(intent);
doc.save(file2);
}
}
}