lista kali ejemplos completa comandos comando basicos linux pdf comparison ghostscript

kali - Comparación de PDF en línea de comandos de Linux



comandos shell linux (3)

Aquí hay un truco para hacerlo.

pdftotext file1.pdf pdftotext file2.pdf diff file1.txt file2.txt

Estoy buscando una herramienta de línea de comandos de Linux para comparar dos archivos PDF y guardar los diffs en un archivo PDF. La herramienta debe crear diff-pdf en un proceso por lotes. Los archivos PDF son planes de construcción, por lo que la comparación de texto pura no funciona.

Algo como:

<tool> file1.pdf file2.pdf -o diff-out.pdf

La mayoría de las herramientas que encontré convierten los archivos PDF a imágenes y los comparo, pero solo con una GUI.

Cualquier otra solución también es bienvenida.


He escrito mi propio script que hace algo similar a lo que estás pidiendo. El script usa 4 herramientas para lograr su objetivo:

  1. Comando de compare de ImageMagick
  2. la utilidad pdftk (si tiene archivos PDF de varias páginas)
  3. Ghostscript (opcional)
  4. md5sum (opcional)

Debería ser bastante fácil portar esto a un archivo por lotes .bat para DOS / Windows.

Pero primero, tenga en cuenta: esto solo funciona bien para archivos PDF que tienen la misma página / tamaño de medios. La comparación se realiza píxel por píxel entre los dos archivos PDF de entrada. El archivo resultante es una imagen que muestra el "diff" de esta manera:

  • Cada píxel que permanece sin cambios se vuelve blanco.
  • Cada píxel que se cambió está pintado en rojo.

Esa imagen de diferencia se guarda como un nuevo PDF para que sea más accesible en diferentes plataformas de sistema operativo.

Estoy usando esto, por ejemplo, para descubrir diferencias mínimas en la visualización de la página cuando entra en juego la sustitución de fuentes en el procesamiento de PDF.

Podría suceder que no haya una diferencia visible entre sus archivos PDF, aunque son diferentes en hash MD5 y / o tamaño de archivo. En este caso, la página PDF de salida "diff" se volvería completamente blanca. Puede descubrir automáticamente esta condición, por lo que solo debe investigar visualmente los PDF no blancos eliminando automáticamente los blancos.

Aquí están los bloques de construcción:

pdftk

Utilice esta utilidad de línea de comando para dividir archivos PDF de varias páginas en varios archivos PDF de una sola página:

pdftk file_1.pdf burst output somewhere/file_1---page_%03d.pdf pdftk file_2.pdf burst output somewhere/file_2---page_%03d.pdf

Si está comparando solo archivos PDF de 1 página, este building block es opcional. Como hablas de "planes de construcción", este es probablemente el caso.

comparar

Utilice esta utilidad de línea de comandos de ImageMagick para crear una página PDF "diff" para cada una de las páginas:

compare / -verbose / -debug coder / -log "%u %m:%l %e" / somewhere/file_1---page_001.pdf / somewhere/file_2---page_001.pdf / -compose src / somewhereelse/file_1--file_2---diff_page_001.pdf

Ghostscript

Debido a metadatos insertados automáticamente (como la fecha actual + hora), la salida PDF no funciona bien para las comparaciones de archivos basados ​​en MD5hash.

Si desea descubrir automáticamente todos los casos en que el PDF de diferenciación consta de una página puramente blanca, debe convertir la página PDF a un formato de mapa de bits sin metadatos utilizando el dispositivo de salida bmp256 . Puedes hacer eso así:

Primero, descubra cuál es el formato de tamaño de página de su PDF. Una vez más, este pequeño identify utilidad viene como parte de cualquier instalación de ImageMagick:

identify / -format "%[fx:(w)]x%[fx:(h)]" / somewhereelse/file_1--file_2---diff_page_001.pdf

Puede almacenar este valor en una variable de entorno como esta:

export my_size=$(identify / -format "%[fx:(w)]x%[fx:(h)]" / somewhereelse/file_1--file_2---diff_page_001.pdf)

Ahora Ghostscript entra en juego, usando una línea de comandos que incluye el tamaño de página descubierto anteriormente como se almacena en la variable:

gs / -o somewhereelse/file_1--file_2---diff_page_001.ppm / -sDEVICE=ppmraw / -r72 / -g${my_size} / somewhereelse/file_1--file_2---diff_page_001.pdf

Esto le proporciona un PPM (Portable PixMap) con una resolución de 72 ppp desde la página PDF original. Normalmente, 72 ppp es lo suficientemente bueno para lo que queremos ... A continuación, cree una página PPM puramente blanca con el mismo tamaño de página:

gs / -o somewhereelse/file_1--file_2---whitepage_001.ppm / -sDEVICE=ppmraw / -r72 / -g${my_size} / -c "showpage"

La parte -c "showpage" es un comando PostScript que le dice a Ghostscript que emita solo una página vacía.

Suma MD5

Use el hash MD5 para comparar automáticamente el PPM original con el PPM de página blanca. En caso de que sean iguales, puede suponer que no existen diferencias entre los archivos PDF y, por lo tanto, cambiar el nombre o eliminar el PDF dif:

MD5_1=$(md5sum somewhereelse/file_1--file_2---diff_page_001.ppm | awk ''{print $1}'') MD5_2=$(md5sum somewhereelse/file_1--file_2---whitepage_001.ppm | awk ''{print $1}'') if [ "x${MD5_1}" == "x${MD5_2}" ]; then mv / somewhereelse/file_1--file_2---diff_page_001.pdf / somewhereelse/file_1--file_2---NODIFFERENCE_page_001.pdf # rename all-white PDF rm / somewhereelse/file_1--file_2---*_page_001.ppm # delete both PPMs fi

Esto le evita tener que inspeccionar visualmente "archivos PDF de diferencias" que no tienen ninguna diferencia.


Hecho en 2 líneas con (allmighty) imagemagick y pdftk:

compare -verbose -debug coder $PDF_1 $PDF_2 -compose src $OUT_FILE.tmp pdftk $OUT_FILE.tmp background $PDF_1 output $OUT_FILE

Las opciones -verbose y -debug son opcionales.

  • compare crea un PDF con el diff como píxeles rojos.
  • pdftk fusiona el diff-pdf con fondo PDF_1