使用iText阅读PDF注释

时间:2011-03-29 14:31:53

标签: c# pdf itext

我试图将PDF注释的内容变为字符串,以便将该信息存储在数据库中以供搜索。

有谁知道如何使用iText / iTextSharp完成此操作?

2 个答案:

答案 0 :(得分:2)

是的,但具体细节实际上取决于你所说的注释的类型。

一般来说:

PdfDictionary pageDict = myPdfReader.getPageN(firstPageIsOne);

PdfArray annotArray = pageDict.getAsArray(PdfName.ANNOTS);

for (int i = 0; i < annotArray.size(); ++i) {
  PdfDictionary curAnnot = annotArray.getAsDict(i);

  int someType = myCodeToGetAnAnnotsType(curAnnot);
  if (someType == THIS_TYPE) {
    writeThisType(curAnnot);
  } else if (someType == THAT_TYPE) {
    writeThatType(curAnnot);
  }
}

有关详细信息,您需要检查PDF Specification,特别是注释说明:“第12.5.6章注释类型”。

如果您能告诉我们您关心的类型,我可以提供更多帮助。

答案 1 :(得分:1)

以后参考通过Google发现此问题的任何人,就像我做的那样......

如果你想要做的是找到粘滞便笺注释的名称和内容你可以做到这一点(部分基于马克的回答)

PdfReader reader = new PdfReader(somePDF);
PdfDictionary pageDict = reader.GetPageN(1);

PdfArray annotArray = pageDict.GetAsArray(PdfName.ANNOTS);

for (int i = 0; i < annotArray.Size; ++i)
{
    PdfDictionary curAnnot = annotArray.GetAsDict(i);

    PdfString name = curAnnot.GetAsString(PdfName.T);
    PdfString contents = curAnnot.GetAsString(PdfName.CONTENTS);
    if (!string.IsNullOrWhiteSpace(name?.ToString()))
    { Console.WriteLine(name); }
    if (!string.IsNullOrWhiteSpace(contents?.ToString()))
    { Console.WriteLine(contents); }
}

此外,为了帮助确定您可能正在寻找的内容,您可以在文本编辑器中打开PDF并查找/ annot,然后您将快速找到注释对象。