【问题标题】:How to get and set value for /BSIColumnData of an annotation PDF itext c#如何获取和设置注释PDF itext c#的/BSIColumnData的值
【发布时间】:2020-12-24 09:43:10
【问题描述】:

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

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 Revu 中,您可以看到如下:

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

【问题讨论】:

  • 你没有告诉我们哪个 BSIColumnData错误。我假设一个编译错误。正确的?请更新您的问题并描述错误。

标签: c# itext itext7


【解决方案1】:

我看到两个错误:

  • 您尝试像这样使用 BSIColumnData 名称:

    iText.Kernel.Pdf.PdfName.BSIColumnData
    

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

    var BSIColumnData = new iText.Kernel.Pdf.PdfName("BSIColumnData");
    
  • 您尝试将该名称的值检索为字符串

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

    但是从您的 RUPS 屏幕截图中可以清楚地看出,该名称的值是一个字符串数组。因此,即使按照第一项GetAsString(BSIColumnData) 中的描述进行更正后,也会返回null。而是这样做

    var BSIColumnData = new iText.Kernel.Pdf.PdfName("BSIColumnData");
    var array = curAnnot.GetAsArray(BSIColumnData);
    

    检查if (array != null) 后,您现在可以使用array.GetAsString(index) 访问相应索引处的字符串。

【讨论】:

    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2023-04-10
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多