Dear Elyes,

thank you for the contribution. Could you please open an improvement issue with the code attached here:
https://issues.apache.org/jira/browse/PDFBOX.

Thanks,
Timo

Am 12.04.2013 10:41, schrieb Elyes Lehtihet:
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);

/* Here you have to download .icc profile */
InputStream is =
OutputIntents.class.getResourceAsStream("/test/color/sRGB.icc");

DestOutputProfile dop = new DestOutputProfile(doc,is, 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();
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);



--

 Timo Boehme
 OntoChem GmbH
 H.-Damerow-Str. 4
 06120 Halle/Saale
 T: +49 345 4780474
 F: +49 345 4780471
 timo.boe...@ontochem.com

_____________________________________________________________________

 OntoChem GmbH
 Geschäftsführer: Dr. Lutz Weber
 Sitz: Halle / Saale
 Registergericht: Stendal
 Registernummer: HRB 215461
_____________________________________________________________________

Reply via email to