#c# #itext #itext7
#c# #itext #itext7
Вопрос:
Как получить и установить значение для /BSIColumnData аннотации (разметки) в формате PDF, используя itext c # в качестве прикрепленного файла? Я использую приведенный ниже код 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();
}
Комментарии:
1.Вы не говорите нам, какая ошибка в BSIColumnData существует. Я предполагаю ошибку компиляции. Правильно? Пожалуйста, обновите свой вопрос и опишите ошибку.
Ответ №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)
.