0
我有一些免費文本註釋的PDF文件。複製註釋
我想在PDF上執行郵件合併功能。我想製作一份PDF副本,並根據一些文本替換方法替換自由文本註釋。
爲了簡單起見,我有一個程序需要註釋並在其後面添加「LHC」。唉,副本可以工作,但註釋保持不變。
我會盡量但是使用PdfAnnotation
,我不確定如何從PdfDictionary
到PdfAnnotation
轉換見下
string oldFile = "C:\\Temp\\oldFile.pdf";
string newFile = "C:\\Temp\\newFile.pdf";
// open the reader
PdfReader reader = new PdfReader(oldFile);
Rectangle size = reader.GetPageSizeWithRotation(1);
Document document = new Document(size);
// open the writer
FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
PdfCopy writer = new PdfCopy(document,fs);
document.Open();
// the pdf content
PdfContentByte cb = writer.DirectContent;
// adding Free Text Annotation
for (int pg = 1; pg < reader.NumberOfPages; pg++)
{
PdfDictionary pageDict = reader.GetPageN(pg);
PdfArray annotArray = pageDict.GetAsArray(PdfName.ANNOTS);
for (int i = 0; i < annotArray.Size; ++i)
{
PdfDictionary curAnnot = annotArray.GetAsDict(i);
PdfName contents = new PdfName("Contents");
PdfString str = curAnnot.GetAsString(contents);
String newString = str.ToString() + "LHC";
curAnnot.Remove(contents);
curAnnot.Put(contents, new PdfString(newString));
}
PdfImportedPage page = writer.GetImportedPage(reader, pg);
// PdfImportedPage pageOut = writer.destinationPdfReader(reader, pg);
//cb.AddTemplate(page, 0, 0);
writer.AddPage(page);
PdfAnnotation annot = new PdfAnnotation(writer, new Rectangle(0, 0));
writer.AddAnnotation(annot);
}
document.Close();
fs.Close();
writer.Close();
reader.Close();
您替換文本內容而不是外觀流。因此,可以使用現有的外觀流。此外使用'PDFCopy'沒有意義,您應該使用'PdfStamper'。 – mkl 2014-10-20 09:07:05
我不確定這是否正確。無論如何,我正在檢查它。我會在一到兩天內回覆我的發現。也許最好的方法是複製頁面,然後從源文件獲取註釋並將它們重新添加回來。 – 2014-10-23 08:10:15