Pregunta

He investigado varios archivos DLL de C # y no he encontrado ninguno que funcione especialmente bien. Mis requerimientos son:

  • Los documentos PDF se cargan a través de una página ASPX.
  • El texto debe extraerse y almacenarse en la base de datos con el PDF.
  • La solución no puede tener un costo adicional para replicar la aplicación web (por lo tanto, si funcionará, se considerará una solución de tarifa fija, pero no una tarifa por instalación).
  • Aunque las conversiones son las más importantes, los usuarios pueden querer cargar muchos archivos PDF a la vez, por lo que la velocidad también es importante.

El proceso posterior que consumirá el texto está configurado para utilizar PDFBox , que parece trabajar bien. Pero:

  • PDFBox está escrito en Java, por lo que necesito iniciarlo como un proceso separado y recuperar los resultados (estoy descartando su uso a través de IKVM ).
  • Por defecto, se lee de los archivos de disco, pero por simplicidad y velocidad, prefiero un filtro stdin- > stdout . Reparar PDFBox fue simple, pero obtener I / O a un subproceso de C # fue tedioso.
  • Sé que podría escribir un nuevo disco en el disco duro, lanzar PDFBox, esperar a que salga y luego leerlo desde el disco duro (o su stdout ), pero parece un error y probablemente sea más lento.

Me sorprende que no pueda encontrar una receta de conversión de PDF, parece ser un requisito común. Entonces, ¿alguien podría ayudarme con cualquiera de los dos?

  • Una solución de conversión enlatada que utiliza que funciona como mínimo y PDFBox .
  • Si usar un filtro de stdio detrás de IIS es realmente una mala idea, una explicación de por qué .

Gracias de antemano.

¿Fue útil?

Solución

Originalmente pregunté cómo escribir datos binarios en un Process.StandardInput ( StreamWriter ) ya que solo maneja datos de caracteres: la respuesta es usar el proceso . StandardInput.BaseStream ( Stream ).

Además, dado que ambas tuberías podrían llenarse (64KB buffers IIUC), usé el siguiente patrón:

  • Generó un hilo para escribir datos y luego estableció una bandera,
  • Generó un hilo para leer todos los datos de retorno, luego establece una bandera,
  • Bucle hasta que se establezcan ambas banderas, llamando a Thread.Sleep (100).
  • Devolver datos leídos del proceso.

Así que, aparte del aspecto intrincado de poner un ejecutable dentro de la aplicación web (o requerir una instalación por separado), esto parece funcionar bien, pero aún debo hacer algunas pruebas de abuso.

Otros consejos

Si tiene la posibilidad de ejecutar Process () en su servidor, puede usar XPDF de http: // www .foolabs.com / xpdf / Una de las utilidades es PDFtoText que es capaz de extraer texto en archivos PDF, e incluso mantener algún tipo de diseño.

En los viejos tiempos, he oído hablar de ejemplos en los que la búsqueda de Adobe y el servicio MS Index combinados también podían extraer texto de archivos PDF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top