pdfsharppuppeteer-sharp

Hyperlinks are lost when using PDFsharp to concatenate multiple PDFs


When using PDFsharp (v1.5x) to concatenate multiple PDF files, hyperlinks that exist in the source files are lost.


Solution

  • The links need to be manually recreated in the composite file. Run this method each time you add a new PdfPage object to the target document.

    private void FixWebLinkAnnotations(PdfPage page, PdfDocument doc, int docPage)
    {
        for (var i = 0; i < page.Annotations.Count; i++)
        {
            var annot = page.Annotations[i];
            var subType = annot.Elements.GetString(PdfAnnotation.Keys.Subtype);
            if (subType == "/Link")
            {
                var dest = annot.Elements.GetDictionary(PdfAnnotation.Keys.A);
                var rect = annot.Elements.GetRectangle(PdfAnnotation.Keys.Rect);
                if (dest != null && rect != null && dest.Elements.Count > 0)
                {
                    var uri = dest.Elements.GetString("/URI");
                    for (var p = 0; p < doc.PageCount; p++)
                    {
                        if (p == docPage && uri != null)
                        {
                            doc.Pages[docPage].Annotations.Add(PdfLinkAnnotation.CreateWebLink(rect, uri));
                        }
                    }
                }
            }
        }
    }
    

    This code was adapted from https://forum.pdfsharp.net/viewtopic.php?f=3&t=3382 to work with hyperlinks rather than document references.