如何使用itext /BSIColumnData作为附加文件,在PDF中获取和设置注释(标记)的值?下面我使用的是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中,您可以看到如下所示:
在Itext-rups 5.5.9中,您可以看到如下所示:
发布于 2020-12-27 09:38:24
我看到两个错误:
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)
访问它们各自索引的字符串。
https://stackoverflow.com/questions/65436545
复制相似问题