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 に答える