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);
}