将pdf文件与书签合并

Xan*_*rUu 5 c# pdf merge pdf-generation itext

我正在尝试合并很多pdf和每个pdf我想要添加一个书签(pdf的名称),我找到了合并pdf的不同技术,但是没有一个只能添加书签,例如.itextsharp添加章节,然后是章节的书签,我不想改变pdf的.

Md *_*ker 14

使用itextsharp你可以做到.我按照以下方法做到......

MergePdfFiles(string outputPdf, string[] sourcePdfs)
{
      PdfReader reader = null;
        Document document = new Document();
        PdfImportedPage page = null;
        PdfCopy pdfCpy = null;
        int n = 0;
        int totalPages = 0;
        int page_offset = 0;
        List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();
        IList<Dictionary<string, object>> tempBookmarks;
      for (int i = 0; i <= sourcePdfs.GetUpperBound(0); i++)
                {
                    reader = new PdfReader(sourcePdfs[i]);
                    reader.ConsolidateNamedDestinations();
                    n = reader.NumberOfPages;
                    tempBookmarks = SimpleBookmark.GetBookmark(reader);

                    if (i == 0)
                    {
                    document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1));
                        pdfCpy = new PdfCopy(document, new FileStream(outputPdf, FileMode.Create));
                        document.Open();
                        SimpleBookmark.ShiftPageNumbers(tempBookmarks, page_offset, null);
                        page_offset += n;
                        if (tempBookmarks != null)
                            bookmarks.AddRange(tempBookmarks);
                        //  MessageBox.Show(n.ToString());
                        totalPages = n;
                    }
                    else
                    {
                        SimpleBookmark.ShiftPageNumbers(tempBookmarks, page_offset, null);
                        if (tempBookmarks != null)
                            bookmarks.AddRange(tempBookmarks);

                        page_offset += n;
                        totalPages += n;
                    }

                    for (int j = 1; j <= n; j++)
                    {
                        page = pdfCpy.GetImportedPage(reader, j);
                        pdfCpy.AddPage(page);

                    }
                    reader.Close();

                }
            pdfCpy.Outlines = bookmarks;
            document.Close();
     }
Run Code Online (Sandbox Code Playgroud)