1

当我用 & 符号创建链接时。在生成的 pdf 而不是&, 我有&

因此,链接已断开

我使用 itextsharp 和 xmlworker 处理 ASP.NET 项目。

我也在演示http://demo.itextsupport.com/xmlworker/中进行了测试,我看到了同样的问题。

适合我的解决方案

// we create the reader
var reader = new PdfReader(new FileStream(path, FileMode.Open));

// we retrieve the total number of pages
var n = reader.NumberOfPages;

for (var page = 1; page <= n; page++)
{
    //Get the current page
    var pageDictionary = reader.GetPageN(page);

    //Get all of the annotations for the current page
    var annots = pageDictionary.GetAsArray(PdfName.ANNOTS);

    //Loop through each annotation
    if ((annots != null) && (annots.Length != 0))
        foreach (var a in annots.ArrayList)
        {

            //Convert the itext-specific object as a generic PDF object
            var annotationDictionary = (PdfDictionary)PdfReader.GetPdfObject(a);

            //Make sure this annotation has a link
            if (!annotationDictionary.Get(PdfName.SUBTYPE).Equals(PdfName.LINK))
                continue;

            //Make sure this annotation has an ACTION
            if (annotationDictionary.Get(PdfName.A) == null)
                continue;

            //Get the ACTION for the current annotation
            var annotationAction = (PdfDictionary)annotationDictionary.Get(PdfName.A);

            //Test if it is a URI action (There are tons of other types of actions, some of which might mimic URI, such as JavaScript, but those need to be handled seperately)
            if (!annotationAction.Get(PdfName.S).Equals(PdfName.URI)) continue;
            var destination = annotationAction.GetAsString(PdfName.URI).ToString();
            destination = destination.Replace("&amp;", "&");
            annotationAction.Put(PdfName.URI, new PdfString(destination));
        }
}
4

1 回答 1

1

您应该对那些特殊的 ASCII 字符使用 URL 编码。例如,“&”应替换为“%26”。在这里您可以找到这些代码的完整列表http://www.w3schools.com/tags/ref_urlencode.asp

于 2014-08-28T10:14:11.137 回答