簡體   English   中英

如何在Itext7中合並時如何將書簽添加到PDF

[英]How to add Bookmarks to PDF when Merging in Itext7

我正在嘗試創建一個合並多個pdf的程序,並為每個pdf都有一個書簽。

我的開始方法是:

    private Byte[] MergePdfForms(Dictionary<string, Stream> files)
    {
        var dest = new MemoryStream();
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        PdfMerger merger = new PdfMerger(pdf);

        foreach (var keyValuePair in files)
        {
               //TODO add bookmark to this page 
            PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(keyValuePair.Value));
            merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages());
            firstSourcePdf.Close();
        }

        pdf.Close();
        return dest.ToArray();
    }

我嘗試過類似的東西

  pdf.InitializeOutlines();
  pdf.AddNamedDestination("Test Bookmark", pdf.GetLastPage().GetPdfObject());

哪個不會創建任何書簽。

看一下這里的例子: http//developers.itextpdf.com/examples/merging-pdf-documents/clone-merging-documents-bookmarks

    private byte[] MergePdfForms(Dictionary<string, Stream> files)
    {
        var dest = new MemoryStream();
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        PdfMerger merger = new PdfMerger(pdf);
        PdfOutline rootOutline = pdf.GetOutlines(false);
        PdfOutline helloWorld = rootOutline.AddOutline("Root");

        int pages = 1;
        foreach (var keyValuePair in files)
        {
            var firstSourcePdf = new PdfDocument(new PdfReader(keyValuePair.Value));
            var subPages = firstSourcePdf.GetNumberOfPages();
            merger.Merge(firstSourcePdf, 1, subPages);
            firstSourcePdf.Close();

            var link1 = helloWorld.AddOutline(keyValuePair.Key);
            link1.AddDestination(PdfExplicitDestination.CreateFit(pdf.GetPage(pages)));
            pages += subPages;

        }
        pdf.Close();
        return dest.ToArray();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM