Hello,
I am trying to implement a process for inserting page piece information externally using a java process. I know we have some adobe API's which can insert the PPD's into PDF's based(IBM suggested). I am wondering whether anyone tried and succeeded in inserting PPD's using Itext java API?
Please note that metadata values are not present inside the PDF. My requirement is to take metadata values from the file name and insert into PDF as per ondemand PPD indexing specifications.
Thank You for your help!!
Yes. It is possible to insert PPD's using itext :-)
Quote from: ronankivr on February 07, 2017, 04:54:10 PM
Yes. It is possible to insert PPD's using itext :-)
Maybe to give a sample code on how to do it, would be also nice :-D since we don't know how to it!!
Here is the code I am using to insert PPD's at page level. This is written in Java. We are passing name and value pairs(Metadata) to addPieceInfo method . This is just a sample. We may need to customize/optimize as per our requirements. I am using itext 5.5.9.jar file.The "appName" is mandatory others variables depends on metadata you wants to tag to the document.
Main class:
PdfName appName = new PdfName("IBM-ODIndexes");
PdfName dataName1 = new PdfName("Cname");
PdfName dataName2 = new PdfName("BankNumber");
PdfName dataName3 = new PdfName("AcctNumber");
PdfName dataName4 = new PdfName("StmtDate");
DocumentPieceInfo dpi = new DocumentPieceInfo();
try {
PdfReader reader = new PdfReader("sample.pdf");
int pages = reader.getNumberOfPages();
for (int p = 1; p <= pages; p++) {
System.out.println("Page "+p +" Inserted");
dpi.addPieceInfo(reader, appName, dataName1,dataName2,dataName3,dataName4, new PdfString("Bud1"),new PdfString("0002"),new PdfString("123678"),new PdfString("20120507"),p);
}
FileOutputStream os=new FileOutputStream("Result-sample1.pdf",true);
PdfStamper stamper = new PdfStamper(reader, os);
stamper.close();
PdfReader reader1 = new PdfReader("Result-sample1.pdf");
Method:
void addPieceInfo(PdfReader reader, PdfName app, PdfName name1,PdfName name2,PdfName name3,PdfName name4, PdfObject value1,PdfObject value2,PdfObject value3,PdfObject value4, int p)
{
PdfDictionary catalog1 = reader.getPageN(p);
PdfDictionary pieceInfo = catalog1.getAsDict(PIECE_INFO);
if (pieceInfo == null)
{
pieceInfo = new PdfDictionary();
catalog1.put(PIECE_INFO, pieceInfo);
}
PdfDictionary appData = pieceInfo.getAsDict(app);
if (appData == null)
{
appData = new PdfDictionary();
pieceInfo.put(app, appData);
}
appData.put(LAST_MODIFIED, new PdfDate());
PdfDictionary privateData = appData.getAsDict(PRIVATE);
if (privateData == null)
{
privateData = new PdfDictionary();
appData.put(PRIVATE, privateData);
}
privateData.put(name1, value1);
privateData.put(name2, value2);
privateData.put(name3, value3);
privateData.put(name4, value4);
}
thank you for sharing :-)