I am using itext7 in java to create a 1-B PdfA using this simple code:
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfOutputIntent;
import com.itextpdf.kernel.pdf.PdfString;
import com.itextpdf.kernel.pdf.PdfViewerPreferences;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.xmp.PdfConst;
import com.itextpdf.kernel.xmp.XMPConst;
import com.itextpdf.kernel.xmp.XMPException;
import com.itextpdf.kernel.xmp.XMPMeta;
import com.itextpdf.kernel.xmp.XMPMetaFactory;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.pdfa.PdfADocument;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import gestionepdf.PdfDocument_Configurazione_Text;
/**
*
* @author UC9001309
*/
public class TestCreatePDFA {
public static final String courier = "C:\\Windows\\fonts\\couri.ttf";
public static final String times = "C:\\Windows\\fonts\\times.ttf";
public static final String helvetica = "C:\\Windows\\fonts\\helvetica.ttf";
public static void main(String[] args) throws FileNotFoundException, IOException, XMPException {
// TODO code application logic here
PdfWriter pdfWriter = new PdfWriter("C:\\Temp\\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()) + ".pdf");
PdfADocument pdfA = new PdfADocument( pdfWriter,PdfAConformanceLevel.PDF_A_1B,new PdfOutputIntent("Custom", "", "https://www.color.org",
"sRGB2014", new FileInputStream("C:\\Users\\UC9001309\\Documents\\NetBeansProjects\\GestionePdf\\sRGB2014.icc")));
Document document = new Document(pdfA, PageSize.A4, false);
XMPMeta meta = XMPMetaFactory.create();
PdfDocumentInfo info = pdfA.getDocumentInfo();
pdfA.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));
pdfA.getCatalog().setLang(new PdfString("it-IT"));
info.addCreationDate();
meta.setProperty(XMPConst.NS_XMP, PdfConst.CreateDate, info.getMoreInfo("CreationDate"));
info.addModDate();
meta.setProperty(XMPConst.NS_XMP, PdfConst.ModifyDate, info.getMoreInfo("ModDate"));
info.setAuthor("MyAuthor");
info.setCreator("MyCreator");
info.setProducer("Producer");
info.setTitle("TEST PdfA " );
PdfFont font_h = PdfFontFactory.createFont(helvetica);
PdfFont font_c = PdfFontFactory.createFont(courier);
PdfFont font_t = PdfFontFactory.createFont(times);
Paragraph p = new Paragraph();
p.setFont(font_c);
p.setItalic();
p.add("Prova pdfa");
p.getAccessibilityProperties().setRole("P");
Paragraph p1 = new Paragraph();
p1.setFont(font_h);
p1.add("Prova pdfa");
p1.getAccessibilityProperties().setRole("P");
Paragraph p2 = new Paragraph();
p2.setFont(font_t);
p2.add("Prova pdfa");
p2.getAccessibilityProperties().setRole("P");
document.add(p);
document.add(p1);
document.add(p2);
pdfA.setXmpMetadata(meta);
document.close();
}
}
But if I try to validate, using online sites some are fine with others not. In particular, a validator gives me this error :
<?xml version="1.0" encoding="UTF-8"?>
-<ValidationReport>
<VersionInformation Version="14.1.182" ID="GdPicture.NET.14"/>
<ValidationProfile Level="B" Part="1" Conformance="PDF/A"/>
<FileInfo FileSize="57849 bytes" FileName="20220726115840.pdf"/>
<ValidationResult Statement="PDF file is not compliant with validation profile requirements." sCompliant="False"/>
-<Details>
-<FailedChecks Count="4">
-<Check ID="InconsistentPDFInfo" OccurenceCount="4">
<Occurence Statement="The PDF Information Dictionary entry CreationDate is not consistent with PDF XMP metadata information." ObjReference="None" Context="Document"/>
<Occurence Statement="The PDF Information Dictionary entry Creator is not consistent with PDF XMP metadata information." ObjReference="None" Context="Document"/>
<Occurence Statement="The PDF Information Dictionary entry ModDate is not consistent with PDF XMP metadata information." ObjReference="None" Context="Document"/>
<Occurence Statement="The PDF Information Dictionary entry Producer is not consistent with PDF XMP metadata information." ObjReference="None" Context="Document"/>
</Check>
</FailedChecks>
</Details>
</ValidationReport>
This is xmp of my pdfa :
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.0-jc003">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/"
xmp:CreateDate="2022-07-26T16:13:07+02:00"
xmp:ModifyDate="2022-07-26T16:13:07+02:00"
xmp:CreatorTool="MyCreator"
pdf:Producer="Producer; modified using iText® Core 7.2.2 (AGPL version) ©2000-2022 iText Group NV"
pdfaid:part="1"
pdfaid:conformance="B">
<dc:creator>
<rdf:Seq>
<rdf:li>MyAuthor</rdf:li>
</rdf:Seq>
</dc:creator>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">TEST PdfA </rdf:li>
</rdf:Alt>
</dc:title>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
This is the dictionary :
Author - MyAuthor
CreationDate - D:20220727094440+02'00'
Creator - MyCreator
ModDate - D:20220727094440+02'00'
Producer - Producer
Title - TEST PdfA
I don't understand if I'm wrong or the validator?
Thanks in advance for anyone who wants to help !