我有4个pdf模板文件,使用itextsharp我添加了值,并且我将4个pdf文件合并/添加到单个文档中,因此所有4个页面都在一个pdf文件名下。现在我想将书签添加到我的pdf文件中。有什么方法可以用C#来更好地理解,请参考下面的图片
嗨,这就是我想要做的,我没有得到任何错误,但我的pdf中仍然没有书签,我想添加4个部分的书签,如图中所示。合并后我要添加书签到最后的pdf。
enter code herepublic string MergePDFs()
{
string outPutFilePath = @"D:\jeldsbre.pdf";
string genereatedpdfs = @"D:\genereatedpdfs";
using (FileStream stream = new FileStream(outPutFilePath, FileMode.Create))
{
Document pdfDoc = new Document(PageSize.A4);
PdfCopy pdf = new PdfCopy(pdfDoc, stream);
pdf.SetMergeFields();
pdfDoc.Open();
var files = Directory.GetFiles(genereatedpdfs);
Console.WriteLine("Merging files count: " + files.Length);
int i = 1;
foreach (string file in files)
{
Console.WriteLine(i + ". Adding: " + file);
pdf.AddDocument(new PdfReader(file));
i++;
}
List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();
IList<Dictionary<string, object>> tempBookmarks = new List<Dictionary<string, object>>();
SimpleBookmark.ShiftPageNumbers(tempBookmarks, 1, null);
bookmarks.AddRange(tempBookmarks);
SimpleBookmark.ShiftPageNumbers(tempBookmarks, 3, null);
bookmarks.AddRange(tempBookmarks);
pdf.Outlines = bookmarks;
if (pdfDoc != null)
pdfDoc.Close();
string base64 = GetBase64(outPutFilePath);
return base64;
}
}
答案 0 :(得分:0)
假设您的原始PDF已经有书签,那么您不仅应该连接文档(使用PdfCopy
类),还应该连接不同文件的不同书签结构(使用{{1} }),不要忘记考虑到你需要正确移动页码。
这是在我的书第7章的ConcatenateBookmarks示例中完成的:
SimpleBookMark
对于此示例的C#版本,请查看http://tinyurl.com/itextsharpIIA2C07以获取相应的iTextSharp示例:
// Create a list for the bookmarks
ArrayList<HashMap<String, Object>> bookmarks = new ArrayList<HashMap<String, Object>>();
List<HashMap<String, Object>> tmp;
for (int i = 0; i < src.length; i++) {
reader = new PdfReader(src[i]);
// merge the bookmarks
tmp = SimpleBookmark.getBookmark(reader);
SimpleBookmark.shiftPageNumbers(tmp, page_offset, null);
bookmarks.addAll(tmp);
// add the pages
n = reader.getNumberOfPages();
page_offset += n;
for (int page = 0; page < n; ) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
copy.freeReader(reader);
reader.close();
}
// Add the merged bookmarks
copy.setOutlines(bookmarks);
如果现有文件没有任何书签(或者如果您不想复制任何现有文件),那么您的问题与我半年前回答的问题重复:{{ 3}}