我想阅读PDF中的标注文本框。我使用iTextSharp迭代所有注释,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
namespace PDFAnnotationReader
{
class Program
{
static void Main(string[] args)
{
StringBuilder text = new StringBuilder();
string fileName = @"C:\Users\J123\Desktop\xyz.pdf";
PdfReader pdfReader = new PdfReader(fileName);
PdfDictionary pageDict = pdfReader.GetPageN(1);
PdfArray annotArray = pageDict.GetAsArray(PdfName.ANNOTS);
for (int i=0;i<annotArray.Size;i++)
{
PdfDictionary curAnnot = annotArray.GetAsDict(i);
}
}
}
检查hashMap
的{{1}},我看到当我得到一个标注是一个标注文本框时,该字典包含以下键值对:
curAnnot
所以我认为我应该做的是检查每个注释,看它是否包含值为{[/IT,/FreeTextCallout]}
{[/Contents,xyz this is a callout]}
的密钥/IT
,如果是,请将/FreeTextCallout
的值作为字符串获取像这样:
/Contents
但似乎不是if (curAnnot.Contains(PdfName.IT))
{
if (curAnnot.Get(PdfName.IT)==PdfName.FREETEXTCALLOUT)
{
Console.Writeline(curAnnot.Get(PdfName.CONTENTS).ToString());
}
}
或PdfName.IT
。如何检查PdfName.FREETEXTCALLOUT
是否存在并检索其值?
答案 0 :(得分:1)
您可以使用PdfName
上的构造函数创建自己的PdfName
对象:
new PdfName("IT");
所以:
var myPdfNameIT = new PdfName("IT");
if (curAnnot.Contains(myPdfNameIT)) {
//...
}