Чтение 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, и вы быстро найдете объект аннотации.