试图阅读标注,如何从iTextSharp中的PdfDictionary获得/ IT的价值?

时间:2014-08-04 20:27:46

标签: c# pdf itextsharp

我想阅读PDF中的标注文本框。我使用iTextSharp迭代所有注释,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

namespace PDFAnnotationReader
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder text = new StringBuilder();
            string fileName = @"C:\Users\J123\Desktop\xyz.pdf";
            PdfReader pdfReader = new PdfReader(fileName);
            PdfDictionary pageDict = pdfReader.GetPageN(1);
            PdfArray annotArray = pageDict.GetAsArray(PdfName.ANNOTS);
            for (int i=0;i<annotArray.Size;i++)
            {
                PdfDictionary curAnnot = annotArray.GetAsDict(i);
            }
        }
    }

检查hashMap的{​​{1}},我看到当我得到一个标注是一个标注文本框时,该字典包含以下键值对:

curAnnot

所以我认为我应该做的是检查每个注释,看它是否包含值为{[/IT,/FreeTextCallout]} {[/Contents,xyz this is a callout]} 的密钥/IT,如果是,请将/FreeTextCallout的值作为字符串获取像这样:

/Contents

但似乎不是if (curAnnot.Contains(PdfName.IT)) { if (curAnnot.Get(PdfName.IT)==PdfName.FREETEXTCALLOUT) { Console.Writeline(curAnnot.Get(PdfName.CONTENTS).ToString()); } } PdfName.IT。如何检查PdfName.FREETEXTCALLOUT是否存在并检索其值?

1 个答案:

答案 0 :(得分:1)

您可以使用PdfName上的构造函数创建自己的PdfName对象:

new PdfName("IT");

所以:

var myPdfNameIT = new PdfName("IT");
if (curAnnot.Contains(myPdfNameIT)) {
    //...
}