我正在尝试使用iTextSharp从pdf中提取所有文本。目前我只能获取页面上的实际文本,而不是Adobe调用的用户注释或“便笺”中包含的文本。有办法做到这一点吗?到目前为止,这是我的代码,但我只是得到空字符串:
PdfReader pdfRead = new PdfReader(pdfFilePath);
AcroFields form = pdfRead.AcroFields;
string txt = "";
for (int page = 1; page <= pdfRead.NumberOfPages; ++page)
{
PdfDictionary pagedic = pdfRead.GetPageN(page);
PdfArray annotarray = (PdfArray)PdfReader.GetPdfObject(pagedic.Get(PdfName.ANNOTS));
if (annotarray == null || annotarray.Size == 0)
continue;
foreach (PdfObject A in annotarray.ArrayList)
{
PdfDictionary AnnotationDictionary = (PdfDictionary)PdfReader.GetPdfObject(A);
txt += AnnotationDictionary.GetAsString(PdfName.NOTE);
txt += "\n";
}
}
答案 0 :(得分:3)
我不了解C#,但您可以找到对应部分here(此示例中使用的文件为pages.pdf)。此示例的输出为:
Annotation 1
/Contents: This is a post-it annotation
/Subtype: /Text
/Rect: [36, 768, 56, 788]
/T: Example
Annotation 2
/C: [0, 0, 1]
/Border: [0, 0, 0]
/A: Dictionary
/Subtype: /Link
/Rect: [66.67, 785.52, 98, 796.62]
第一个注释是便签注释(用ISO-32000-1的话来说,一个文本注释)和你正在寻找的键不是PdfName.NOTE
,但标题为PdfName.T
,内容为PdfName.CONTENTS
。
答案 1 :(得分:2)
if (AnnotationDictionary.Get(PdfName.SUBTYPE).Equals(PdfName.TEXT))
{
string Title = AnnotationDictionary.GetAsString(PdfName.T).ToString();
string Content = AnnotationDictionary.GetAsString(PdfName.CONTENTS).ToString();
}