protected void AddFileAttachments()
{
Dictionary<string,PdfObject> fs = pdf.GetDocumentFileAttachment();
if (fs.Count == 0)
return;
PdfDictionary catalog = reader.Catalog;
PdfDictionary names = (PdfDictionary)PdfReader.GetPdfObject(catalog.Get(PdfName.NAMES), catalog);
if (names == null) {
names = new PdfDictionary();
catalog.Put(PdfName.NAMES, names);
MarkUsed(catalog);
}
MarkUsed(names);
Dictionary<string,PdfObject> old = PdfNameTree.ReadTree((PdfDictionary)PdfReader.GetPdfObjectRelease(names.Get(PdfName.EMBEDDEDFILES)));
foreach (KeyValuePair<string,PdfObject> entry in fs) {
String name = entry.Key;
int k = 0;
StringBuilder nn = new StringBuilder(name);
while (old.ContainsKey(nn.ToString())) {
++k;
nn.Append(' ').Append(k);
}
old[nn.ToString()] = entry.Value;
}
PdfDictionary tree = PdfNameTree.WriteTree(old, this);
// Remove old EmbeddedFiles object if preset
PdfObject oldEmbeddedFiles = names.Get(PdfName.EMBEDDEDFILES);
if (oldEmbeddedFiles != null) {
PdfReader.KillIndirect(oldEmbeddedFiles);
}
// Add new EmbeddedFiles object
names.Put(PdfName.EMBEDDEDFILES, AddToBody(tree).IndirectReference);
}