Extraer texto de archivos PDF en C #

Simplemente, necesito extraer texto de varios PDF (bastante en realidad) para analizar los contenidos antes de pegarlos en una base de datos SQL.

He encontrado algunas librerías C # gratuitas bastante esquemáticas que funcionan (la mejor usa iTextSharp), pero hay muchos errores de formateo y algunos caracteres están codificados y muchas veces hay espacios (”) POR TODOS LADOS – dentro de las palabras, entre cada letra, enormes bloques de ellos ocupando varias líneas, todo parece un poco aleatorio.

¿Hay alguna manera fácil de hacer esto que estoy pasando por alto completamente (bastante probable!) O es una tarea un poco ardua que implica convertir los valores de bytes extraídos en letras de manera confiable?

Puede echar un vistazo a este artículo . Se basa en la excelente biblioteca iTextSharp .

Puede haber alguna dificultad para hacer esto de manera confiable. El problema es que PDF es un formato de presentación que concede importancia a la buena tipografía. Supongamos que solo quiere dar salida a una sola palabra: toque .

Un motor de renderizado en PDF podría generar esto como 2 llamadas separadas, como se muestra en este pseudo-código:

moveto (x1, y); output ("T") moveto (x2, y); output ("ap") 

Esto se haría porque el kerning predeterminado (espaciado entre letras) entre las letras T y a podría no ser aceptable para el motor de renderizado, o podría estar agregando o eliminando un microespacio entre caracteres para obtener una línea completamente justificada. Lo que finalmente resulta es que los fragmentos de texto reales que se encuentran en PDF a menudo no son palabras completas, sino partes de ellos.

Eche un vistazo a Tika en DotNet, disponible a través de Nuget: https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

Esto es una envoltura alrededor de la extremadamente buena biblioteca de Tika java, usando IKVM. Muy fácil de usar y maneja una amplia variedad de tipos de archivos distintos de PDF, incluidos los formatos de oficina antiguos y nuevos. Se seleccionará automáticamente el analizador basado en la extensión de archivo, por lo que es tan fácil como:

 var text = new TextExtractor().Extract(file.FullName).Text; 

Actualización: Una precaución con esta solución es que el desarrollo en IKVM ha finalizado. No estoy seguro de lo que esto significará a la larga. http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx

Puede probar Toxy, un marco de extracción de texto / datos en .NET. En Toxy 1.0, se admitirá PDF. Para más detalles, visite http://toxy.codeplex.com

Puedes probar la biblioteca Docotic.Pdf (descargo de responsabilidad: yo trabajo para Bit Miracle) para extraer texto de archivos PDF. La biblioteca utiliza algunas heurísticas para extraer texto atractivo sin espacios indeseados entre letras y palabras.

Por favor, eche un vistazo a una muestra que muestra cómo extraer texto de PDF .

Si buscas una alternativa “gratuita”, echa un vistazo a PDF Clown . Personalmente, he usado el enfoque basado en iFilter, y parece funcionar bien en caso de que necesite soportar otros tipos de archivos fácilmente. Código de muestra aquí .

En caso de que esté procesando archivos PDF con el fin de importar datos a una base de datos, le sugiero considerar el SDK de ByteScout PDF Extractor . Algunas funciones útiles incluidas son

  • detección de mesa;
  • extracción de texto como CSV, XML o texto formateado (con la restauración de diseño opcional);
  • búsqueda de texto con soporte para expresiones regulares;
  • API de bajo nivel para acceder a objetos de texto

DESCARGO DE RESPONSABILIDAD: estoy afiliado a ByteScout