c# - para - itextsharp net standard
¿Es posible obtener elementos estructurales de un archivo PDF utilizando iTextSharp? (1)
Estamos utilizando iTextSharp con una aplicación C # WinForms para analizar un archivo PDF. Usando iTextSharp, puedo extraer fácilmente los datos de texto del archivo PDF. Supongamos que un archivo PDF contiene una imagen rodeada por dos líneas de texto. En este caso, no pude extraer la información sobre la imagen.
Mi requerimiento es:
- Obtener elementos estructurales del archivo PDF
- Procesar si cada uno es de tipo texto, imagen, tabla u otro
Por ejemplo, los elementos estructurales son similares a los siguientes:
text :paragraph1
text :paragraph2
Image:Image
text :paragraph3
Table:table info
text :Paragraph4
Si puedo obtener información en un formato como este, puedo entender fácilmente la información de texto, imagen, tabla, encabezado o pie de página.
Entonces, ¿es posible obtener este tipo de información usando iTextSharp? Si es así, por favor ilumíname sobre esto. De lo contrario, ¿podría sugerir algunas otras herramientas capaces de cumplir este requisito?
Gracias a todos,
Saravanan
Solía tener este tipo de necesidad hace un tiempo. Utilicé esta función (de Extraer imágenes usando 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;
}
Como puede ver en la foreach (PdfName name in xobj.Keys)
, creo que puede analizar fácilmente todo un PDF y tratar todo tipo de datos a partir de él. Pero no estoy seguro de la parte de "verticalidad" de su necesidad.
Espero que pueda ayudarte.