Чтение PDF аннотации с iText

Я пытаюсь получить содержимое аннотации PDF в строку, чтобы я мог хранить эту информацию в базе данных для целей поиска.

кто-нибудь знает, как это сделать с помощью iText/iTextSharp?

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, в частности описания аннотаций: "глава 12.5.6 типы аннотаций".

Если вы можете сказать нам, какие типы вы заботитесь о, я могу чем-то помочь.


для будущей ссылки на всех, кто находит этот вопрос через 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, и вы быстро найдете объект аннотации.