首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取和设置注释PDF /BSIColumnData的值

如何获取和设置注释PDF /BSIColumnData的值
EN

Stack Overflow用户
提问于 2020-12-24 09:43:10
回答 1查看 290关注 0票数 0

如何使用itext /BSIColumnData作为附加文件,在PDF中获取和设置注释(标记)的值?下面我使用的是Itext7代码,但在BSIColumnData上是错误的:

代码语言:javascript
运行
复制
public void BSIcontents ()
    {
        string pdfPath = @"C:\test PDF.pdf";
        iText.Kernel.Pdf.PdfReader pdfReader = new iText.Kernel.Pdf.PdfReader(pdfPath);
        iText.Kernel.Pdf.PdfDocument pdfDoc = new iText.Kernel.Pdf.PdfDocument(pdfReader);
        int numberOfPages = pdfDoc.GetNumberOfPages();

        int z = 0;
            for (int i = 1; i <= numberOfPages; i++)
            {
                iText.Kernel.Pdf.PdfDictionary page = pdfDoc.GetPage(i).GetPdfObject();
                iText.Kernel.Pdf.PdfArray annotArray = page.GetAsArray(iText.Kernel.Pdf.PdfName.Annots);
                if (annotArray == null)
                {
                    z++;
                    continue;
                }
                int size = annotArray.Size();
                for (int x = 0; x < size; x++)
                {
                    iText.Kernel.Pdf.PdfDictionary curAnnot = annotArray.GetAsDictionary(x);
                    if (curAnnot != null)
                    {
                        if (curAnnot.GetAsString(iText.Kernel.Pdf.PdfName.BSIColumnData) != null)
                        {
                            MessageBox.Show("BSIColumnData: " + curAnnot.GetAsString(iText.Kernel.Pdf.PdfName.BSIColumnData).ToString());
                        }
                    }
                }
            }
        pdfReader.Close();
    }

在Bluebeam中,您可以看到如下所示:

在Itext-rups 5.5.9中,您可以看到如下所示:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-27 09:38:24

我看到两个错误:

  • 您尝试使用BSIColumnData名称如下:

iText.Kernel.Pdf.PdfName.BSIColumnData

这假定您的自定义名称已经有一个静态PdfName成员。但是当然没有,只有在itext本身中使用的标准名称的预定义成员。如果您想使用其他名称,您必须自己创建一个PdfName实例并使用该实例,例如:

var BSIColumnData =新的BSIColumnData

  • 您尝试以字符串的形式检索该名称的值。

curAnnot.GetAsString(iText.Kernel.Pdf.PdfName.BSIColumnData)

但是从您的RUPS屏幕截图中可以清楚地看到,该名称的值是一个字符串数组。因此,即使按照第一项中的说明进行更正之后,GetAsString(BSIColumnData)也将返回null。相反,去做

var BSIColumnData =新iText.Kernel.Pdf.PdfName("BSIColumnData");var数组= curAnnot.GetAsArray(BSIColumnData);

在检查了array.GetAsString(index).之后,您现在可以使用if (array != null)访问它们各自索引的字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65436545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档