2012-09-17 38 views
18

Necesito refactorizar algunos informes (generados con Jasper) usando MS Reporting Services. Las copias de los informes originales están disponibles en PDF. El requisito es hacer los nuevos informes "pixel perfect", que es muy engorroso ...Diff visual de archivos PDF para determinar la perfección de píxeles

Para facilitar la vida, me gustaría tener una herramienta que superponga los PDF de informes originales y generados para medir si son píxeles perfecto o no.

¿Hay una herramienta así?

+0

Interesante pregunta. No estoy seguro de cuánto tiene que ver esto con los informes, SSRS o Jasper. Puede obtener una mejor respuesta reemplazando esas etiquetas con otras y actualizando el título para reflejar que desea hacer una "diferencia visual de PDF". – Jeroen

+1

¿A quién se le ocurrió eso como un requisito y cuál fue la justificación del negocio? Extraiga cada página como un mapa de bits, compare por píxel. ¿Están en blanco y negro? –

+0

Ver [¿Herramienta para comparar grandes cantidades de archivos PDF?] (Http://stackoverflow.com/q/145657) –

Respuesta

18

El método más simple e inmediatamente disponible para hacer esto: use ImageMagick's compare (que también está disponible en Windows).

Incluso puede comparar las páginas en PDF (aunque utiliza Ghostscript como su delegado para hacer que las páginas PDF a píxel imágenes en primer lugar):

compare.exe  ^
    tested.pdf[0] ^
    reference.pdf[0]^
    -compose src ^
    delta.pdf 

El resultado delta.pdf representará cada píxel tan rojo que tiene una color diferente entre las dos páginas PDF comparadas. Todos los píxeles idénticos serán puramente blancos. El [0] indica compare para usar las primeras páginas de cada archivo para comparar (el recuento de páginas se basa en cero).

Se puede ver cómo esto se resuelve con el siguiente ejemplo:

compare.exe     ^
    http://qtrac.eu/boson1.pdf[1]^
    http://qtrac.eu/boson2.pdf[1]^
    -compose src     ^
    delta.pdf 

Estas son las páginas respectivas (convertidos a archivos PNG a escala reducida para la visualización web). La página de referencia está a la izquierda, la página modificada es el del medio, el 'delta-pixel-are-roja' imagen está a la derecha:

first page   second page   delta image

Un poco diferente resultado visual puede obtener omitiendo el parámetro -compose src. Luego le ponen píxeles del archivo original como un fondo sombreado en gris (por contexto) con los píxeles delta en rojo:

compare.exe     ^
    http://qtrac.eu/boson1.pdf[1]^
    http://qtrac.eu/boson2.pdf[1]^
    delta.pdf 

first page   second page   delta.pdf

Si no te gusta el color rojo el color de las diferencias de píxeles, utilice -highlight-color:

compare.exe     ^
    http://qtrac.eu/boson1.pdf[1]^
    http://qtrac.eu/boson2.pdf[1]^
    -highlight-color green  ^
    delta.pdf 

La resolución predeterminada que sirve para hacer las páginas PDF es de 72 dpi.En caso de necesitar una mayor precisión, se puede cambiar a 300 dpi con el parámetro -density así:

compare.exe     ^
    -density 300     ^
    http://qtrac.eu/boson1.pdf[1]^
    http://qtrac.eu/boson2.pdf[1]^
    delta.pdf 

Nota, conmutación a densidades más altas se ralentizará el proceso y crear archivos más grandes.

Puede incluso crear un archivo .txt * la imagen delta que describe las coordenadas de cada píxel y los respectivos valores de color para:

compare      ^
    http://qtrac.eu/boson1.pdf[1]^
    http://qtrac.eu/boson2.pdf[1]^
    -compose src     ^
    -highlight-color black  ^
    delta.txt 

Después, simplemente contar el número total de píxeles vs negro (lo siento, este es Unix/Linux/MacOSX sintaxis):

total_pixels=$(($(cat delta.txt | wc -l) - 1)) 
black_pixels=$(($(grep black delta.txt | wc -l) -1)) 

En el ejemplo utilizado para las ilustraciones anteriores, me sale

total_pixels=500990 
black_pixels=8727 

Por supuesto el resultado 'ideal' sería

black_pixels=0 
+0

Aquí hay una secuencia de comandos para diferenciar visualmente dos archivos PDF página por página utilizando las herramientas ImageMagick y Poppler (para mayor velocidad): 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. –

+0

Parece que esto ya no funciona? O posiblemente requiera ImageMagick v7 +. v6.9.6-5 se queja: 'tipo de imagen no reconocida 'pdf''. – Monkpit

+1

@Monkpit: por supuesto que funciona. Su ImageMagick no está configurado para consumir PDF como formato de entrada. Debe haber instalado y configurado Ghostscript como * delegado * en nombre de ImageMagick para procesar la entrada de PDF en una imagen ráster y entregárselo a la mensajería instantánea. Por lo general, ese ya es el caso para la mayoría de las instalaciones listas para usar. Para obtener más detalles, consulte también * [esta serie de respuestas] (http://stackoverflow.com/search?q=user%3A359307+%5Bimagemagick%5D+delegate+pdf) *. –

2

Recomiendo imprimir los informes con PDFCreator como una imagen PNG, luego puede usar un programa de gráficos como Paint .NET para hacer que el fondo sea transparente y superponer ambos informes uno sobre el otro.

Usando alguna transformación de color en una o ambas imágenes (por ejemplo, el color uno en rojo, el otro en azul) debería mostrarle las diferencias muy buenas.

Encontrará PDFCreator aquí http://de.pdfforge.org/pdfcreator. Es completamente gratis de usar.

3

diffpdf le permite comparar dos archivos PDF lado a lado.

4

Esta pregunta ya tiene una respuesta aceptada, pero me gustaría dar mi dos centavos. Hicimos i-net PDFC que se adapta perfectamente a su situación. Se ha realizado para verificar que los informes elaborados con otra herramienta de informes coincidan con los resultados de nuestro software de informes. Pero es aún más poderoso. Lo que PDFC no hace es verificar la perfección de píxeles basada en imágenes, pero verifica, con ciertas configuraciones, que un documento es básicamente (y visualmente) el mismo en función de su contenido. Mucho más poderoso que la comparación pura basada en píxeles.

i-net PDFC puede funcionar de forma visual o en línea de comandos (por ejemplo, para el proceso por lotes) y funciona con sistemas de integración continuos. El componente visual incluso permite una superposición semitransparente de los dos archivos PDF para que el usuario compruebe los píxeles perfectos.

El software está recién salido de la versión beta. Pruébalo y cuéntanos lo que piensas. (Sí. Trabajo para la compañía que hizo esto.)

Cuestiones relacionadas