iText7-书签未跳转到页面

问题描述 投票:0回答:1

在 ASP.NET 应用程序中,我使用 iText7 创建带有书签的新 pdf。使用以下代码,我可以创建一个包含多个页面和书签的 pdf,但是当我单击书签时没有任何反应。如何让读者在单击书签时导航到相关页面。

public ActionResult CreatePdf()
{
    byte[] pdfBytes;
    using (var stream = new MemoryStream())
    using (var wri = new PdfWriter(stream))
    using (var pdf = new PdfDocument(wri))
    using (var doc = new Document(pdf))
    {   

        doc.Add(new Paragraph("Working with iText7"));

        doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));

        PdfOutline root = pdf.GetOutlines(false);

        foreach (var item in col1)
        {
                        
            doc.Add(new Paragraph(item.Name));
            root.AddOutline(item.Name);
            doc.Add(new AreaBreak());
        }

        doc.Close();
        doc.Flush();
        pdfBytes = stream.ToArray();
    }

    return File(pdfBytes, "application/pdf", "test.pdf");
}
c# asp.net-mvc itext pdf-generation itext7
1个回答
0
投票
public ActionResult CreatePdf()
{
    byte[] pdfBytes;
    using (var stream = new MemoryStream())
    using (var wri = new PdfWriter(stream))
    using (var pdf = new PdfDocument(wri))
    using (var doc = new Document(pdf))
    {
        List<Destination> destinations = new List<Destination>();

        doc.Add(new Paragraph("Working with iText7"));

        // Iterate through your collection (col1) and add content and destinations
        for (int i = 0; i < col1.Count; i++)
        {
            var item = col1[i];

            Destination destination = PdfExplicitDestination.CreateFitH(i + 1, doc.GetPdfDocument().GetPage(i + 1));
            destinations.Add(destination);

            doc.Add(new Paragraph(item.Name));
            doc.Add(new AreaBreak());
        }

        PdfOutline root = pdf.GetOutlines(false);

        for (int i = 0; i < col1.Count; i++)
        {
            var item = col1[i];
            root.AddOutline(item.Name).AddDestination(destinations[i]);
        }

        doc.Close();
        doc.Flush();
        pdfBytes = stream.ToArray();
    }

    return File(pdfBytes, "application/pdf", "test.pdf");
}

检查此代码。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.