// ---------------------------------------------------------------------------
/**
* Manipulates a PDF file src with the file dest as result
* @param src the original PDF
*/
public byte[] ManipulatePdf(byte[] src) {
PdfReader reader = new PdfReader(src);
PdfDictionary root = reader.Catalog;
PdfDictionary outlines = root.GetAsDict(PdfName.OUTLINES);
if (outlines == null) return null;
PdfArray dests = new PdfArray();
AddKids(dests, outlines.GetAsDict(PdfName.FIRST));
if (dests.Size == 0) return null;
PdfIndirectReference pir = reader.AddPdfObject(dests);
PdfDictionary nametree = new PdfDictionary();
nametree.Put(PdfName.NAMES, pir);
PdfDictionary names = new PdfDictionary();
names.Put(PdfName.DESTS, nametree);
root.Put(PdfName.NAMES, names);
using (MemoryStream ms = new MemoryStream()) {
using (PdfStamper stamper = new PdfStamper(reader, ms)) {
}
return ms.ToArray();
}
}