iTextSharp - 如何在C#中阅读所有评论并回复PDF

时间:2016-05-07 02:11:55

标签: c# pdf itextsharp

使用下面的代码我每页只能读一个评论,如何阅读PDF中所有页面的所有评论。或以任何方式一次性从PDF中获取所有评论列表。

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;
string all_string = "";
foreach (PdfObject A in annotarray.ArrayList)
{
    PdfDictionary AnnotationDictionary = (PdfDictionary)PdfReader.GetPdfObject(A);

    if (AnnotationDictionary.Get(PdfName.SUBTYPE).Equals(PdfName.TEXT))
    {
        all_string += AnnotationDictionary.GetAsString(PdfName.T).ToString() +"\n";
        all_string += AnnotationDictionary.GetAsString(PdfName.CONTENTS).ToString()+ "\n";
    }
}
}

1 个答案:

答案 0 :(得分:0)

页面在页面树中组织。页面树的每个叶子指的是页面字典。 /Annots条目是页面字典的可选键之一。它包含属于特定页面的注释数组。

您正在遍历页面树中每个页面的每个页面字典,检索每个页面字典的/Annots数组。这是正确的程序。

您的问题“如何阅读PDF中所有页面的所有评论?”是错误的。您已经正确地阅读了PDF中所有页面的所有评论。 PDF固有的是注释以这种方式组织。即使有一个iTextSharp方法在一个方法中为您提供所有注释,它将使用您现在使用的完全相同的代码。这会带来什么收获?这需要相同的处理时间。