Ich versuche, den Text in einigen PDF-Annotationen mit iTextSharp zu ändern. Hier ist mein Code:Kann nicht geändert werden/Inhalt der Annotation
void changeAnnotations(string inputPath, string 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();
}
Wenn ich öffnen Sie die Ausgabedatei in Adobe Reader, kein Text in einem der Anmerkungen geändert hat. Wie sollte ich den neuen Wert in einer Anmerkung festlegen?
UPDATE: Ich habe festgestellt, dass der Wert in dem Popup-Fenster geändert wird, das erscheint, wenn ich auf die Anmerkung klicke. Und in einigen Fällen, wenn ich diesen Wert in der Popup-Box ändere, wird die Änderung dann auf die Annotation angewendet.
Sie überprüfen nicht, ob die betreffende Anmerkung einen Aussehensstrom hat. Wenn dies der Fall ist, können PDF-Viewer die Annotation einfach als in diesem Stream definiert anzeigen, anstatt eine eigene Darstellung zu generieren. Darüber hinaus kann der ** Inhalt ** Text für eine Anmerkung sein oder auch nicht, vgl. die Spezifikation: * Text, der für die Annotation angezeigt werden soll, oder, wenn dieser Typ der Annotation keinen Text anzeigt, eine alternative Beschreibung des Annotationsinhalts der in lesbarer Form *. – mkl
@ mkl, kann ich nicht herausfinden, wie man feststellen kann, ob es einen Aussehensstrom gibt. Ist das die '/ AP'-Eigenschaft? Ich habe das für eine der Anmerkungen überprüft und es ist ein Wörterbuch mit einem einzigen Eintrag, dessen Wert "28 0 R" ist, aber keines der Elemente in "annotArray" hat diesen Wert. Diese Annotation ist ein 'FreeText', wie finde und ändere ich den Text, der in diesem Textfeld angezeigt wird? – sigil