¿Existe una biblioteca PDF de Visual Studio que le permita leer sangrías en un PDF?

Estoy trabajando en un programa que intenta analizar datos dentro de un archivo PDF. El problema es que necesitamos analizar una determinada sección del PDF que está formateada en una jerarquía de tres niveles: Título, subtítulo, párrafo. Hasta ahora estamos usando saltos de línea (\n) para intentar analizar los datos, pero es en gran medida ineficiente. Incluso si tuviéramos todos los valores posibles para los encabezados y subtítulos, la solución aún no sería ideal, ya que se podrían crear nuevos archivos PDF con nuevos valores de encabezado y subtítulo.

Sin embargo, los archivos PDF se crean de tal manera que el encabezado es el más cercano al margen izquierdo, con el subtítulo con una sangría más alejada y una sangría aún mayor en el párrafo. Nos gustaría poder usar las sangrías para identificar las líneas que queremos analizar. ¿Hay una biblioteca de PDF para Visual Studio que pueda hacer esto? Estoy codificando en C#.

Respuestas (2)

Los archivos PDF están diseñados para mostrar contenido y no para almacenar contenido de manera organizada. Los archivos PDF no contienen encabezados, subtítulos ni párrafos. Lo que ves en la página PDF como encabezados o párrafos, dentro del archivo PDF son lo mismo, algo de texto escrito en posiciones fijas con diferentes fuentes para que visualmente tengas encabezados o párrafos.
Las sangrías que ve no existen como objetos específicos en el archivo PDF. Las sangrías se logran escribiendo el encabezado en una coordenada X, el subtítulo en X + 50 y el contenido del párrafo en X + 100 (50 y 100 son solo ejemplos ficticios).
Lo que debe hacer es extraer los fragmentos de texto para incluir también la posición del texto. Los fragmentos de texto se organizan en líneas según la posición Y de los fragmentos de texto (los fragmentos de texto con la misma Y están en la misma línea). Los fragmentos de texto se agregan a la línea en función de su posición X creciente. Una vez que tenga las líneas, inspeccione la posición X de cada línea (la posición X del primer fragmento de texto en la línea). La X más pequeña representa un encabezado, la siguiente X representa un subtítulo y la siguiente X representa un párrafo.
La empresa para la que trabajo desarrolla la biblioteca XFINIUM.PDF que puede ayudarlo con la extracción de texto. Debe implementar la lógica anterior en los fragmentos de texto extraídos.

Te sugiero que mires iTextSharp . He usado la versión de Java para crear, actualizar e inspeccionar archivos PDF. Lo mejor de todo es que es totalmente compatible con StackExchange.