我試圖使用iTextSharp更改某些PDF註釋中的文本。這是我的代碼:無法更改/註釋的內容
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();
}
當我在Adobe Reader中打開輸出文件時,任何註釋中的文本都沒有改變。我應該如何在註釋中設置新值?
更新:我發現在單擊註釋時出現的彈出框中更改了值。在某些情況下,當我在彈出框中修改此值時,更改將應用於註釋。
您不檢查相關注釋是否有外觀流。如果確實如此,則PDF查看器可以選擇僅在該流中預先定義註釋,而不是生成自己的外觀。此外,**內容**可能會或可能不會顯示爲註釋文本,參見參考資料。規範:*應爲註釋顯示的文本,或者,如果此類註釋不顯示文本,則以人類可讀的形式*替代描述註釋的內容。 – mkl
@mkl,我無法弄清楚如何確定是否有外觀流。那是'/ AP'屬性嗎?我檢查了其中一個註釋,它是一個單個條目的值爲'28 0 R'的字典,但是'annotArray'中沒有任何項目具有該值。這個註釋是一個'FreeText',我如何查找和更改顯示在這個文本框中的文本? – sigil