2008-10-01 18 views

Respuesta

22

He usado pdftohtml para eliminar tablas de PDF en CSV. Se basa en Xpdf, que es una herramienta de uso más general, que incluye pdftotext. Simplemente lo envuelvo como un Proceso. Inicia una llamada desde C#.

Si usted está buscando algo un poco más de bricolaje, hay la biblioteca iTextSharp - un puerto de Java de iText - y PDFBox (sí, se dice Java - pero tienen una versión .NET a través de IKVM.NET). Aquí hay algunos artículos de CodeProject sobre el uso de iTextSharp y PDFBox de C#.

Y, si usted es realmente un masoquista, puede llamar al PDF IFilter de Adobe con interoperabilidad COM. El IFilter specs es bastante simple, pero supongo que la sobrecarga de interoperabilidad sería significativa.

Editar: Después de volver a leer la pregunta y las respuestas posteriores, queda claro que el OP trata con imágenes en su PDF. En ese caso, deberá extraer las imágenes (las bibliotecas de PDF anteriores pueden hacerlo con bastante facilidad) y ejecutarlas a través de un motor de OCR.

He usado MODI de forma interactiva antes, con resultados decentes.Es COM, por lo que calificó de C# a través de interoperabilidad es también doable y bonitas simple:

' lifted from http://en.wikipedia.org/wiki/Microsoft_Office_Document_Imaging 
Dim inputFile As String = "C:\test\multipage.tif" 
Dim strRecText As String = "" 
Dim Doc1 As MODI.Document 

Doc1 = New MODI.Document 
Doc1.Create(inputFile) 
Doc1.OCR() ' this will ocr all pages of a multi-page tiff file 
Doc1.Save() ' this will save the deskewed reoriented images, and the OCR text, back to the inputFile 

For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your way through each page of results 
    strRecText &= Doc1.Images(imageCounter).Layout.Text ' this puts the ocr results into a string 
Next 

File.AppendAllText("C:\test\testmodi.txt", strRecText)  ' write the OCR file out to disk 

Doc1.Close() ' clean up 
Doc1 = Nothing 

Otros como Tesseract, pero no tengo experiencia directa con él. He oído cosas buenas y malas al respecto, así que supongo que depende en gran medida de la calidad de su fuente.

+0

Esta fue una excelente lista de recursos .. gracias – torial

+0

si el PDF es de un escáner, entonces será realmente sólo sea una imagen y PDFBox no será capaz de obtener texto del mismo: [PDFFox preguntas frecuentes sobre el análisis de texto desde PDF] (http://pdfbox.apache.org/userguide/faq.html#notext). Además, vea la respuesta por @ jm4 – mmcrae

1

Puede usar un módulo como perl PDF para extraer el texto. Y use otra herramienta para importar la información pertinente a la base de datos.

Estoy seguro de que hay componentes de PDF para .NET, pero no he probado ninguno, así que no sé lo que es bueno.

1

Si el PDF es un escaneo de texto impreso, será difícil (implica el procesamiento de imágenes, reconocimiento de caracteres, etc.) hacerlo usted mismo. PDF generalmente almacenará los documentos escaneados como JPEG internamente. Es mejor utilizar una herramienta de terceros (herramienta de OCR) que hace esto.

7

No puede extraer texto escaneado de un PDF. Usted necesita un software de OCR. La buena noticia es que hay algunas aplicaciones de código abierto que puede probar y que la ruta de OCR será más fácil que usar una biblioteca de PDF para extraer texto. Echa un vistazo a Tesseract y GOCR.

5

He publicado sobre el análisis de PDF en uno de mis blogs. Ir a este enlace:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

Editar: Enlace obras sin largas. A continuación citado de http://web.archive.org/web/20130507084207/http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

Bueno, lo siguiente se basa en ejemplos populares disponibles en la web. Lo que hace esto es "leer" el archivo pdf y enviarlo como texto en el control de cuadro de texto enriquecido en el formulario. La biblioteca PDFBox for .NET puede ser descargada de sourceforge.

Es necesario agregar una referencia a IKVM.GNU.Classpath & PDFBox-0.7.3. Y también, FontBox-0.1.0-Dev.dll y PDFBox-0.7.3.dll deben agregarse en la carpeta bin de su aplicación. Por alguna razón no puedo recordar (tal vez es de uno de los tutoriales), también agregué al bin IKVM.GNU.Classpath.dll.

En la nota lateral, acaba de obtener mi copia de "Head First C#" (en la sugerencia de Keith ) de Amazon. ¡El libro es genial! Está realmente escrito para principiantes . Esta edición cubre VS2008 y el marco 3.5.

Aquí tienes ...

/* Marlon Ribunal 
* Convert PDF To Text 
* *******************/ 

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Drawing.Printing; 
using System.IO; 
using System.Text; 
using System.ComponentModel.Design; 
using System.ComponentModel; 
using org.pdfbox.pdmodel; 
using org.pdfbox.util; 

namespace MarlonRibunal.iPdfToText 
{ 
    public partial class MainForm : Form 
    { 
     public MainForm() 
     { 
      InitializeComponent(); 
     } 

     void Button1Click(object sender, EventArgs e)  
     {  
      PDDocument doc = PDDocument.load("C:\\pdftoText\\myPdfTest.pdf"); 
      PDFTextStripper stripper = new PDFTextStripper(); 
      richTextBox1.Text=(stripper.getText(doc)); 
     } 

    } 
} 
+0

gracias! Me salvó un dolor de cabeza! – JasonS

+4

El enlace de arriba ya no funciona - aparece el mensaje de error "No se puede abrir la conexión al proveedor de datos" – jontsnz

+1

PDFbox NO podrá obtener texto de un PDF si el PDF es una imagen escaneada: [¿Cómo es que no recibo ningún texto? de un documento PDF?] (http://pdfbox.apache.org/userguide/faq.html#notext) – mmcrae

Cuestiones relacionadas