2014-08-27 4 views
1

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("&amp;", "&"); 
      annotationAction.Put(PdfName.URI, new PdfString(destination)); 
     } 
} 

Répondre

1

Vous devez utiliser le codage URL pour les caractères ASCII spéciaux. Par exemple, '&' doit être remplacé par '% 26'. Voici où vous pouvez trouver une liste complète de ces codes http://www.w3schools.com/tags/ref_urlencode.asp

+0

Il pourrait être bon d'inclure un extrait de code montrant comment vous pouvez encoder certains caractères ou des chaînes :) – Stormie

+0

J'ai mis à jour ma question, je mets une solution qui fonctionne pour moi – sadiqmrd

Questions connexes