Hi,

using the infos from
http://svn.apache.org/repos/asf/pdfbox/trunk/examples/src/main/java/org/
apache/pdfbox/examples/pdfa/CreatePDFA.java and
http://java2s.com/Open-Source/Java/PDF/PDFBox-1.4.0/org/apache/pdfbox/ex
amples/pdmodel/ImageToPDF.java.htm I wrote my own program that converts
JPG to PDF/A-1b with PdfBox 2.0.0-SNAPSHOT.

All works fine but according to 3-Heights PDF Validator Online Tool and
the PDF-Validation of PdfBox the PDF is not a valid PDF/A-1b. 
3-Heights tells me

        Validating file "PdfBox-pic23392.pdf" for conformance level
pdfa-1b
        XML line 1:1: Start tag expected, '<' not found.
        The document does not conform to the requested standard.
        The document's meta data is either missing or inconsistent or
corrupt.

and PdfBox-Validation

        java.lang.AssertionError: File is not a valid PDF/A-1b: 
        Error on MetaData, Failed to parse [7.1]

The source code of my program is

        import java.io.IOException;
        import java.io.InputStream;
        import java.io.OutputStream;
        import javax.xml.transform.TransformerException;
        import org.apache.jempbox.xmp.XMPMetadata;
        import org.apache.jempbox.xmp.pdfa.XMPSchemaPDFAId;
        import org.apache.pdfbox.pdmodel.PDDocument;
        import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
        import org.apache.pdfbox.pdmodel.PDPage;
        import org.apache.pdfbox.pdmodel.common.PDMetadata;
        import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
        import org.apache.pdfbox.pdmodel.graphics.color.PDOutputIntent;
        import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg;
        import
org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
        
        public class PdfBoxJpgConverter {
        
            public void convert(final InputStream in, final OutputStream
out) throws Exception {
        
                PDDocument doc = null;
                try {
                    doc = new PDDocument();
        
                    PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
        
                    doc.addPage(page);
        
                    PDXObjectImage ximage = new PDJpeg(doc, in);
        
                    float scaleFactor = getFitToPageScaleFactor(page,
ximage);
        
                    PDPageContentStream contentStream = new
PDPageContentStream(doc, page);
        
                    contentStream.drawXObject(ximage, 0, 0, scaleFactor
* ximage.getWidth(), scaleFactor * ximage.getHeight());
        
                    writeXmpMetadata(doc);
                    writeOutputIntent(doc);
        
                    contentStream.close();
                    doc.save(out);
                } finally {
                    if (doc != null) {
                        doc.close();
                    }
                }
        
            }
        
            private float getFitToPageScaleFactor(final PDPage page,
final PDXObjectImage image) {
                float pageWidth = page.getMediaBox().getWidth();
                float pageHeight = page.getMediaBox().getHeight();
                float imageWidth = image.getWidth();
                float imageHeight = image.getHeight();
                return Math.min(pageHeight / imageHeight, pageWidth /
imageWidth);
            }
        
            private void writeXmpMetadata(final PDDocument document)
throws IOException, TransformerException {
                PDDocumentCatalog catalog =
document.getDocumentCatalog();
                PDMetadata metadata = new PDMetadata(document);
                XMPMetadata xmp = new XMPMetadata();
        
                XMPSchemaPDFAId pdfaid = new XMPSchemaPDFAId(xmp);
                pdfaid.setConformance("B");
                pdfaid.setPart(1);
                pdfaid.setAbout("");
        
                xmp.addSchema(pdfaid);
                metadata.importXMPMetadata(xmp);
                catalog.setMetadata(metadata);
            }
        
            private void writeOutputIntent(final PDDocument doc) throws
Exception {
                PDDocumentCatalog cat = doc.getDocumentCatalog();
        
                InputStream colorProfile =
PdfBoxJpgConverter.class.getResourceAsStream("/sRGB_IEC61966-2-1_black_s
caled.icc");
        
                PDOutputIntent oi = new PDOutputIntent(doc,
colorProfile);
                oi.setInfo("sRGB IEC61966-2.1");
                oi.setOutputCondition("sRGB IEC61966-2.1");
                oi.setOutputConditionIdentifier("sRGB IEC61966-2.1");
                oi.setRegistryName("http://www.color.org";);
        
                cat.addOutputIntent(oi);
            }
        
        }

Am I doing something wrong or is this a bug?

Thanks for the help.

Florian

Reply via email to