[ https://issues.apache.org/jira/browse/PDFBOX-1564?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13630390#comment-13630390 ]
Guillaume Bailleul commented on PDFBOX-1564: -------------------------------------------- Thanks for your contribution. I just have one side question. Did you validate your PDF/A with other validators than pdfbox preflight ? > Extending COSName to produce PDF/A with correct OutputIntents > ------------------------------------------------------------- > > Key: PDFBOX-1564 > URL: https://issues.apache.org/jira/browse/PDFBOX-1564 > Project: PDFBox > Issue Type: Improvement > Reporter: Elyes Lehtihet > Priority: Minor > Original Estimate: 1h > Remaining Estimate: 1h > > Hello, > First of all, thanks for this tool, found it very useful. > Below some sample code to include (sRGB) ICC profile and corresponding > OutputIntents to the generated PDF/A. The produced PDF successfully > passes validation. > It would be nice to have the COSName' extension included in the next > release so we won't have to use a homemade build. > Regards, > Elyes > ---- > * Extension in COSName (org.apache.pdfbox.cos) > public static final COSName OutputIntents = new COSName( "OutputIntents" ); > public static final COSName OutputIntent = new COSName( "OutputIntent" ); > public static final COSName DestOutputProfile = new COSName( > "DestOutputProfile" ); > * Add new classes > public class OutputIntents implements COSObjectable { > private COSDictionary dictionary; > public OutputIntents(PDDocument doc, InputStream colorProfile) throws > Exception{ > dictionary = new COSDictionary(); > dictionary.setItem(COSName.TYPE, COSName.OutputIntent); > dictionary.setItem(COSName.S, COSName.GTS_PDFA1); > DestOutputProfile dop = new DestOutputProfile(doc,colorProfile, false); > dop.configure(); > dictionary.setItem(COSName.DestOutputProfile, dop); > } > public COSBase getCOSObject() { > return dictionary; > } > public COSDictionary getDictionary() > { > return dictionary; > } > public void setInfo( String value ) > { > dictionary.setString("Info", value); > } > public void setOutputCondition( String value ) > { > dictionary.setString("OutputCondition", value); > } > public void setOutputConditionIdentifier( String value ) > { > dictionary.setString("OutputConditionIdentifier", value); > } > public void setRegistryName( String value ) > { > dictionary.setString("RegistryName", value); > } > } > public class DestOutputProfile extends PDStream { > public DestOutputProfile(PDDocument document) { > super(document); > } > public DestOutputProfile(COSStream str) { > super(str); > } > public DestOutputProfile(PDDocument doc, InputStream str) > throws IOException { > super(doc, str); > } > public DestOutputProfile(PDDocument doc, InputStream str, boolean filtered) > throws IOException { > super(doc, str, filtered); > } > public void configure(){ > try { > getStream().setFilters(COSName.FLATE_DECODE); > getStream().setInt( COSName.LENGTH, getByteArray().length ); > getStream().setInt(COSName.N, 3); > addCompression(); > } > catch (Exception e) { > e.printStackTrace(); > System.exit(-1); > } > } > } > * Sample code to include output intent > PDDocumentCatalog cat = doc.getDocumentCatalog(); > COSDictionary root = (COSDictionary)cat.getCOSObject(); > /* Here you have to download .icc profile */ > InputStream colorProfile = > OutputIntents.class.getResourceAsStream("/test/color/sRGB.icc"); > OutputIntents oi = new OutputIntents(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"); > COSArray outputIntents = new COSArray(); > outputIntents.add(oi); > root.setItem("OutputIntents", outputIntents); -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira