Extraer texto de archivos PDF en C#


Bastante simple, necesito extraer texto de varios PDF (bastante en realidad) para analizar el contenido antes de pegarlo en una base de datos SQL.

He encontrado algunas bibliotecas gratuitas de C# bastante incompletas que funcionan (la mejor usa iTextSharp), pero hay innumerables errores de formato y algunos caracteres están revueltos y la mayor parte del tiempo hay espacios (' ') EN TODAS PARTES: dentro de las palabras, entre cada letra, enormes bloques de ellas ocupando varias líneas, todo parece un poco al azar.

¿Hay alguna manera fácil de hacer esto que estoy pasando por alto completamente (muy probablemente!) o es un poco de una tarea ardua que implica la conversión de los valores de bytes extraídos en letras de forma fiable?

Author: Bjarki Heiðar, 2010-01-22

7 answers

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

 9
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-22 10:10:28

Puede haber alguna dificultad en hacer esto de manera confiable. El problema es que PDF es un formato de presentación que da importancia a una buena tipografía. Supongamos que solo desea generar una sola palabra: Toque.

Un motor de renderizado 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 interlineado predeterminado (interlineado 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 algún micro espacio entre caracteres para obtener una línea completamente justificada. Lo que esto finalmente resulta es que los fragmentos de texto reales que se encuentran en PDF muy a menudo no son palabras completas, sino piezas de ellas.

 19
Author: Tarydon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-22 10:16:39

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

Esta es una envoltura alrededor de la extremadamente buena biblioteca java Tika, usando IKVM. Muy fácil de usar y maneja una amplia variedad de tipos de archivos que no sean PDF, incluidos los formatos de oficina antiguos y nuevos. Seleccionará automáticamente el analizador basado en la extensión del 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 terminado. No estoy seguro de lo que esto significará a largo plazo. http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx

 12
Author: David Hammond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-27 14:26:24

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

 3
Author: Tony Qu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 23:28:55

Puedes probar Docotic.Pdf library (descargo de responsabilidad: Trabajo para Bit Miracle) para extraer texto de archivos PDF. La biblioteca utiliza algunas heurísticas para extraer texto de aspecto agradable sin espacios no deseados entre letras en palabras.

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

 1
Author: Bobrovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-22 07:25:50

Si estás buscando una alternativa "gratuita", echa un vistazo a PDF Clown. Personalmente he utilizado el enfoque basado en IFilter, y parece funcionar bien en caso de que necesite admitir otros tipos de archivos fácilmente. Código de ejemplo aquí.

 0
Author: Jussi Palo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-23 10:27:39

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

  • detección de tabla;
  • 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 con ByteScout

 0
Author: Eugene M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-22 09:44:53