如何将书签添加到PDF文件?

时间:2014-11-20 13:43:59

标签: c# pdf itextsharp

我有4个pdf模板文件,使用itextsharp我添加了值,并且我将4个pdf文件合并/添加到单个文档中,因此所有4个页面都在一个pdf文件名下。现在我想将书签添加到我的pdf文件中。有什么方法可以用C#来更好地理解,请参考下面的图片 My pdf looks like this image 1 I want to display like image 2

嗨,这就是我想要做的,我没有得到任何错误,但我的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;
        }               

    }

1 个答案:

答案 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}}