Impossible de changer / Contenu de l’annotation

J’essaie de modifier le texte de certaines annotations PDF à l’aide de iTextSharp. Voici mon code:

void changeAnnotations(ssortingng inputPath, ssortingng outputPath) { PdfReader pdfReader = new PdfReader(inputPath); PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create)); //get the PdfDictionary of the 1st page PdfDictionary pageDict = pdfReader.GetPageN(1); //get annotation array PdfArray annotArray = pageDict.GetAsArray(PdfName.ANNOTS); //iterate through annotation array int size = annotArray.Size; for (int i = 0; i < size; i++) { //get value of /Contents PdfDictionary dict = annotArray.GetAsDict(i); PdfString contents = dict.GetAsString(PdfName.CONTENTS); //check if /Contents key exists if (contents != null) { //set new value dict.Put(PdfName.CONTENTS, new PdfString("value has been changed")); } } pdfStamper.Close(); } 

Lorsque j’ouvre le fichier de sortie dans Adobe Reader, aucun texte n’a été modifié dans les annotations. Comment devrais-je définir la nouvelle valeur dans une annotation?

UPDATE: J’ai constaté que la valeur était en train d’être modifiée dans la boîte de dialog qui apparaît lorsque je clique sur l’annotation. Et dans certains cas, lorsque je modifie cette valeur dans la boîte contextuelle, la modification est ensuite appliquée à l’annotation.

Comme l’a expliqué le PO dans un commentaire:

Cette annotation est un FreeText . Comment trouver et modifier le texte affiché dans cette zone de texte?

Les annotations en texte libre permettent à un certain nombre de mécanismes de définir le texte affiché:

  • Flux d’apparence pré-formaté, référencé par l’entrée N dans le dictionnaire AP
  • Une chaîne de texte riche avec une chaîne de style par défaut donnée dans RC et DS respectivement
  • Une chaîne d’apparence par défaut appliquée aux contenus donnés dans DA et Contents respectivement

(Pour plus de détails, voir la spécification PDF ISO 32000-1, section 12.5.6.6 Annotations en texte libre )

Si vous souhaitez modifier le texte à l’aide de l’un de ces mécanismes, veillez à supprimer ou à ajuster le contenu des entrées pour les autres mécanismes. sinon, votre modification risque de ne pas être visible ou même visible sur certains spectateurs, mais pas visible sur d’autres.

Je ne sais pas comment déterminer s’il existe un stream d’apparence. Est-ce la propriété /AP ? J’ai vérifié cela pour l’une des annotations et c’est un dictionnaire avec une seule entrée dont la valeur est 28 0 R

Ainsi, l’ une des annotations est en effet accompagnée d’un stream d’apparences. L’ entrée unique dont la valeur est 28 0 R vraisemblablement le nom N pour indiquer l’aspect normal . 28 0 R est une référence à l’object indirect avec le numéro d’object 28 et la génération 0 .

Si vous souhaitez modifier le contenu du texte mais ne souhaitez pas traiter les détails de mise en forme, vous devez supprimer l’entrée AP .