Можно ли получить структурные элементы из PDF-файла с помощью iTextSharp?
Мы используем iTextSharp с приложением C# WinForms для анализа PDF-файла. Используя iTextSharp, я могу легко извлечь текстовые данные из файла PDF. Предположим, файл PDF содержит изображение, окруженное двумя строками текста. В этом случае я не смог извлечь информацию об изображении.
Мое требование:
- Получить структурные элементы файла PDF
- Обрабатывает ли каждый тип текста, изображения, таблицы или другой
Например, структурные элементы похожи на следующее:
text :paragraph1
text :paragraph2
Image:Image
text :paragraph3
Table:table info
text :Paragraph4
Если я смогу получить информацию в таком формате, как этот, я легко пойму информацию о тексте, изображении, таблице, верхнем или нижнем колонтитуле.
Итак, возможно ли получить такую информацию с помощью iTextSharp? Если да, пожалуйста, просветите меня об этом. В противном случае, не могли бы вы предложить другие инструменты, способные удовлетворить это требование?
Спасибо всем,
Saravanan
1 ответ
Я имел такую потребность некоторое время назад. Я использовал эту функцию (из Извлечения изображений с помощью iTextSharp):
private static PdfObject FindImageInPDFDictionary(PdfDictionary pg)
{
PdfDictionary res =
(PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
PdfDictionary xobj =
(PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
if (xobj != null)
{
foreach (PdfName name in xobj.Keys)
{
PdfObject obj = xobj.Get(name);
if (obj.IsIndirect())
{
PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
PdfName type =
(PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
//image at the root of the pdf
if (PdfName.IMAGE.Equals(type))
{
return obj;
}// image inside a form
else if (PdfName.FORM.Equals(type))
{
return FindImageInPDFDictionary(tg);
} //image inside a group
else if (PdfName.GROUP.Equals(type))
{
return FindImageInPDFDictionary(tg);
}
}
}
}
return null;
}
Как вы можете видеть в foreach (PdfName name in xobj.Keys)
Заявление, я думаю, вы можете легко проанализировать целый PDF и обработать все виды данных из него. Но я не уверен насчет "вертикальности" вашей потребности.
Надеюсь, это поможет вам.