2008-09-28 22 views
78

Necesito comparar una gran cantidad de archivos PDF para su contenido óptico. Debido a que los archivos PDF se crearon en diferentes plataformas y con diferentes versiones del software, existen diferencias estructurales. Por ejemplo:¿Herramienta para comparar grandes cantidades de archivos PDF?

  • la CHUNKING de texto puede ser diferente
  • el orden de escritura puede ser diferente
  • la posición puede ser difieren poco de píxeles

Se debe comparar el contenido como un pueblo humanos y no la estructura interna. Quiero probar las regresiones entre las diferentes versiones del generador de PDF que utilizamos.

+3

Una respuesta parcial sería usar [pdftotext] (http://en.wikipedia.org/wiki/Pftftxt) y comparar el texto contenido. – Sklivvz

+0

Pero esto ignorará todas las informaciones no textuales como líneas, cuadros, imágenes, cuadros, etc. También creo que no muestra las posiciones ópticas del texto sino la posición estructural. – Horcrux7

+0

Estoy de acuerdo, no es un criterio suficiente. Por otro lado, es un criterio necesario, por lo tanto, es adecuado como una prueba unitaria. – Sklivvz

Respuesta

38

Debido a que no existe tal herramienta disponible que hemos escrito uno. Puede descargar i-net PDF content comparer y usarlo. Espero que ayuden a otros con el mismo problema.Si tiene problemas o si tiene comentarios para nosotros, puede comunicarse con nuestro servicio de asistencia. software pdf

enter image description here

+0

La ventaja de esta herramienta es que no es un comparador de texto puro ni un comparador de imágenes. Se compara por estructura, comprueba si los elementos que lo componen son "iguales", por lo que los PDF comparados no tienen que coincidir con el 100%, sino que se encuentran dentro de una similitud definible. Y es gratis. – gamma

+0

¡Recomendaría esto también! Se estrelló en un documento, así que se lo envié. ¡Lo arreglaron! : D Me siento genial. Puede generar imágenes con diferencias o puede proporcionarle un informe de texto en la consola. –

+3

@gamma ¿Dónde está esa aplicación gratis? Cuesta al menos 200 USD por año (!). Solo es gratis una vez durante 30 días. Eso es demasiado caro para lo que haría con eso. – ygoe

4

Creo que su mejor enfoque sería convertir el PDF a imágenes con una resolución decente y hacer una comparación de imagen.

Para generar imágenes desde un PDF puede usar Adobe PDF Library o la solución sugerida en Best way to convert pdf files to tiff files.

Para comparar los archivos TIFF generados que encontré GNU tiffcmp (para Windows parte de GnuWin32 tiff) y tiffinfo hice un buen trabajo. Use tiffcmp -l y cuente el número de líneas de salida para encontrar las diferencias. Si está satisfecho con el cambio de una pequeña cantidad de contenido (por ejemplo, diferencias de antialiasing), utilice tiffinfo para contar el número total de píxeles y luego puede generar un valor de diferencia porcentual.

Por cierto, para cualquier persona que haga una comparación de PDF simple donde la estructura no ha cambiado, es posible usar la línea de comando diff e ignorar ciertos patrones, p. con GNU diff 2.7:

diff --brief -I xap: -I xapMM: -I /CreationDate -I /BaseFont -I /ID --binary --text

Esto todavía tiene el problema de que no siempre capta los cambios en los nombres de las fuentes generadas.

+0

Creo que la comparación de 2 imágenes es más compleja que la comparación de los archivos PDF. – Horcrux7

+0

La comparación de imágenes se puede hacer con GnuWin32 tiffcmp. Actualizaré mi respuesta para profundizar en esto. – danio

12

he utilizado un script horneado en casa, que

  • convierte todas las páginas en dos archivos PDF a mapas de bits
  • colores páginas PDF de 1 a rojo sobre blanco
  • cambios en blanco a transparente páginas de PDF 2
  • superpone cada página de PDF 2 en la parte superior de la página correspondiente de PDF 1
  • ejecuta la conversión a/colorante y superponiendo en paralelo en múltiples núcleos

Software utilizado:

  • GhostScript para la conversión de PDF a mapa de bits
  • ImageMagick para la coloración, transparencia y superposición
  • inotify para la sincronización de procesos paralelos
  • cualquier visor de imágenes PNG con capacidad para revisar el resultado

Pros:

  • implementación simple
  • todas las herramientas que se utilizan son de código abierto
  • ideal para encontrar pequeñas diferencias en la disposición

Contras:

  • la conversión es lenta
  • principales diferencias entre Archivos PDF (por ejemplo, paginación) da lugar a un desastre
  • mapas de bits no son zoomable
  • sólo funciona bien para el texto y los diagramas de blanco y negro
  • no-fácil de usar interfaz gráfica de usuario

que he estado buscando una herramienta que haría lo mismo en el nivel PDF/PostScript.

Así es como nuestro script invoca los servicios públicos (tenga en cuenta que ImageMagick utiliza GhostScript entre bastidores para hacer la conversión PDF-> PNG):

$ convert -density 150x150 -fill red -opaque black +antialias 1.pdf back%02d.png 
$ convert -density 150x150 -transparent white +antialias 2.pdf front%02d.png 
$ composite front01.png back01.png result01.png # do this for all pairs of images 
+1

¿Por qué no compartir el script completo? –

+1

Esto es lo que usé para la composición: 'para i en $ (seq -w 0 05); do /cygdrive/c/Progra~1/ImageMagick-6.6.9-Q8/composite.exe 1- $ i.png 2- $ i.png resultado- $ i.png; done' –

+0

Aquí hay una secuencia de comandos que no escribe archivos temporales en el disco y usa el pdftoppm de Poppler, que es más rápido que Ghostscript: https://gist.github.com/brechtm/891de9f72516c1b2cbc1. Emite un JPG por cada página de los PDF en un directorio 'pdfdiff' e imprime además los números de las páginas que difieren entre los dos archivos PDF. –

8

También hemos utilizado pdftotext (véase la respuesta de Sklivvz) para generar Versiones ASCII de PDF y wdiff para compararlos.

Utilice el interruptor -layout de pdftotext para mejorar la legibilidad y tener una idea de los cambios en el diseño.

Para obtener buen rendimiento de color de wdiff, utilizar este script envoltorio:

#!/bin/sh 
RED=$'\e'"[1;31m" 
GREEN=$'\e'"[1;32m" 
RESET=$'\e'"[0m" 
wdiff -w$RED -x$RESET -y$GREEN -z$RESET -n $1 $2 
0

blubeam lo hará por usted

0

Usted puede tratar por compare pdf archivos PDF con Tarkware Comparer. Pero no es gratis y requiere Adobe Acrobat.

1

Nuestro producto, PDF Comparador - http://www.premediasystems.com/pdfc.html "- va a hacer esto bastante elegante y eficiente Tampoco es gratis, y es un Mac OS X única aplicación

+0

Esta herramienta compara píxel por píxel. Esto es muy simple. La pregunta fue una comparación como lo hace un ser humano. – Horcrux7

+1

@ Horcrux7: ¿Pero cómo, aparte de comparar "píxel por píxel", los ojos humanos comparan diferentes páginas con un aspecto similar?!? –

+0

@KurtPfeifle - Me doy cuenta de que este es un comentario antiguo ... pero los seres humanos ** no ** comparan imágenes pixel a pixel; la forma en que los seres humanos comparan las diferencias en las imágenes es bastante compleja, pero depende en gran medida del reconocimiento de patrones y la heurística. – CBRF23

1

Sobre la base de sus necesidades, un convertido al texto solución sería.. ser el más fácil y directa. yo no creo que la idea de mapa de bits fue muy bien.

19

no es en realidad una herramienta diffpdf.

http://www.qtrac.eu/diffpdf.html

Su debilidad es que no reacciona w Cuando las adiciones hacen que el nuevo texto se desplace parcialmente a una página nueva. Por ejemplo, si la página anterior 4 debe compararse con el final de la página 5 y el comienzo de la página 6, deberá cambiar los parámetros para comparar las dos divisiones por separado.

+0

diffpdf es sólido! –

+1

La versión original de código abierto todavía está disponible en http://www.qtrac.eu/diffpdf-foss.html –

Cuestiones relacionadas