2010-08-06 14 views
15

Tengo un montón de documentos en PDF con datos tabulares que debo extraer en un formato más legible para almacenar en una hoja de cálculo, base de datos o lo que sea.Extraiga las tablas en PDF mediante programación

¿Hay algo en el mundo (preferiblemente libre) que es capaz de obtener datos de tabla de archivos PDF en un formato más legible en mayor ya sea de forma nativa integrada con una aplicación o de forma pasiva a través de línea de comandos o rizando el proceso en el código (.net)?

Puede ser cualquier formato realmente (doc, html) siempre que se mantengan las tablas.

Todo lo que he encontrado hasta ahora es una excepción (solo hace un documento a la vez, tengo cientos, eso no está pasando) o no mantiene la estructura de la tabla.

Cualquier idea por favor publicar.

+0

Ayudaría si pudiera ampliar esta pregunta con ejemplos específicos del PDF fuente, ya que esto es necesario para responder la pregunta con precisión. – andersoj

+0

@Thilo: le asignó una recompensa a esta pregunta, y no está claro si @markdigi está prestando atención. ¿Tiene alguna muestra de datos para señalar que le gustaría abordar? – andersoj

+0

@andersoj Esto está relacionado con http://stackoverflow.com/questions/3929793/how-can-i-extract-parse-tabular-data-from-a-text-file-in-perl (obtengo los datos de texto de pdftotext). – Thilo

Respuesta

10

Esto es una molestia gigante. En general, la extracción del contenido de texto de un archivo PDF se ejecuta en contra de lo que PDF quiere que haga.

Comience tratando de sacar el texto. Esto puede ser más o menos exitoso, dependiendo de cómo se construya el PDF. Un lugar para comenzar es GhostScript o pstotext. Si eso te falla, este tipo tiene un list of text extraction tools. Una vez que tenga la secuencia de texto, podría intentar volver a ensamblar la estructura tabular programáticamente.

Por último, si se encuentra en muy malas condiciones, y si los archivos PDF no cooperan, podría hacer lo de OCR. La solución adecuada a largo plazo es obtener los datos en el formato correcto desde el principio, ya sea mediante un proceso único, masivo, doloroso y, probablemente, parcialmente manual; o para ir a la fuente y sugerir que los datos se proporcionen en una forma más utilizable.

Si puede dar un archivo de ejemplo PDF más específico, puede haber una respuesta mejor o más precisa ... NO hay una solución general para esto, si es posible, deberá adaptarse a su fuente específica datos.

Tenga en cuenta que rather pointed response to the general question ... no ayuda con el hecho de que tiene el problema delante de usted, pero ¿podría proporcionarle una tapa útil al explicarle a su jefe por qué no hay una respuesta obvia? ;-)

Apareció una nueva pregunta de SO, y se refirió a esta biblioteca - iTextSharp - que posiblemente esté relacionada.ASÍ PREGUNTA: Best way to extract...

0

Cuando dice

todo lo que he encontrado hasta ahora ... sólo hace una doc a la vez

Vamos a suponer que quiere decir "es una aplicación GUI, sin interfaz de programación ".

En este caso, puede usar Microsoft UI Automation para controlar la aplicación mediante programación y hacer que haga lo que desee.

UIA ... proporciona un medio para exponer y recopilar información sobre los elementos y controles de la interfaz de usuario para admitir la accesibilidad de la interfaz de usuario y la automatización de pruebas de software ... y es compatible tanto con .NET Framework.

0

Teniendo en cuenta su requisito, la respuesta directa a su pregunta sería que no es posible. La razón es que, a diferencia de Word/Excel, la especificación PDF no tiene un objeto llamado Tabla. La tabla que ve en esos documentos PDF es simplemente una serie de rectángulos dibujados de tal manera que parece una tabla y depende de PDF Writer crear esos archivos PDF, porque algunos pueden dibujar una tabla tipo de estructura usando Series of Line.

Pero, posiblemente, podría escribir su propio analizador basado en PDF File Specification, pero sigue siendo una tarea desalentadora si decide implementar su propio programa de análisis y va a tomar varios meses para conseguir uno que está trabajando con un buen número de documentos PDF.

Incase, usted decidió escribir su propio analizador. El siguiente artículo te dará un salto inicial. Code Project Article

+0

Hay un montón de Conjuntos de herramientas PDF por ahí ... No sé cómo esto ayuda a responder la pregunta. – andersoj

+0

@andersoj, gracias por sus comentarios. He estado desarrollando una solución comercial de PDF durante los últimos 2 años. De acuerdo con mis conocimientos y años de experiencia en el formato de archivo PDF, varios de nuestros clientes le hicieron esta pregunta en el pasado. Por lo tanto, di mi respuesta directa. Además, hasta donde yo sé, no hay tales componentes disponibles en el mercado. Pero hay algunas soluciones comerciales disponibles que exportarían PDF como documento de Word y sé hasta qué punto son confiables;) Cheers, –

+0

Ah, ¿eso es similar al enfoque de LaTeX a Word? Genere un mapa de bits para cada página, colóquelo en la página, ¿está listo su documento de Word? –

1

El formato PDF se crea como una colección de letras, que no tienen ningún formato inherente ni nada. Puede pensar en PDF como una página que ha llegado a través del OCR y lo está tomando desde allí; las letras y sus coordenadas están ahí; el resto depende de usted, para descubrir el diseño, los formatos, las columnas y las tablas eventuales.

1

Si todos los datos son datos de texto, siempre puede usar iTextSharp. Es gratis y solo necesitas el "itextsharp.dll".

http://sourceforge.net/projects/itextsharp/

Aquí es una simple función para leer el texto de un PDF.

Public Shared Function GetTextFromPDF(PdfFileName As String) As String 
    Dim oReader As New iTextSharp.text.pdf.PdfReader(PdfFileName) 

    Dim sOut = "" 

    For i = 1 To oReader.NumberOfPages 
     Dim its As New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy 

     sOut &= iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(oReader, i, its) 
    Next 

    Return sOut 
End Function 

Eso al menos le conseguirá el texto para comenzar.

+0

No es gratis para uso comercial. – Paparazzi

0

He intentado extraer el texto plano de archivos PDF utilizando herramientas como pdf2text, pero una gran parte de la tabla y el formato y la información de diseño se pierde para reconstruir con precisión la versión original.

Podría ser más exitoso usar una API de PDF para extraer las posiciones x, y de los cuadros de texto y las líneas, y usar esa información para reconstruir la tabla.

Parece que hay varias herramientas de terceros y APIs que tratan este enfoque:

La versión de pago de Solid Framework parece ser capaz de extraer tablas de PDF a Excel y CSV automáticamente y bastante bien a partir de los archivos PDF I' lo arrojaron.

El PDF Mechanic gratuito parece ser un pequeño programa de GUI envuelto alrededor de Solid Framework, que puede usar para probar su técnica de extracción de PDF.

También existe la herramienta gratuita pdf2table que es posible que pueda llamar desde su programa, pero aún no lo he probado.

3
  1. Para un fondo de por qué el formato de archivo PDF no debe, ser pensado alguna vez de como adecuadas para alojar, datos estructurados extraíbles, ver este artículo:

  2. Para una increíble familia de herramientas que mejora cada semana para extraer datos tabulares de archivos PDF (a menos que sean páginas escaneadas), punto que contradice '1' por encima de ver estos enlaces:

0

Recientemente me encontré con este problema.

Una solución alternativa que encontré fue abrir un documento PDF en Adobe y exportarlo a xml. Al menos con mi PDF, conservó la información de la tabla y luego pude trabajar programáticamente con XML para generar archivos tabulares como Excel, etc.

El otro problema que encontré fue que Adobe solo le permite exportar un archivo a una tiempo y tuve muchos archivos. Por suerte, Adobe también tiene una función de fusión. Terminé fusionando todos los archivos y luego exportándolos como un gran archivo XML y trabajando con ese archivo para generar lo que necesitaba.

Cuestiones relacionadas