Lorsque je crée un lien avec des esperluettes. Au lieu de pdf généré &
, j'ai &
Liaison avec des esperluettes dans un fichier pdf généré par xmlworker
Pour cette raison, le lien est rompu
Je travaille sur le projet ASP.NET avec iTextSharp et xmlworker.
J'ai également testé dans la démo http://demo.itextsupport.com/xmlworker/ et je vois le même problème.
solution qui fonctionne pour moi:
// 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("&", "&");
annotationAction.Put(PdfName.URI, new PdfString(destination));
}
}
Il pourrait être bon d'inclure un extrait de code montrant comment vous pouvez encoder certains caractères ou des chaînes :) – Stormie
J'ai mis à jour ma question, je mets une solution qui fonctionne pour moi – sadiqmrd