Problemas con la conversión por lotes de .png a .pdf usando convert

Problemas con la conversión por lotes de .png a .pdf usando convert
convert /home/bill/TempScan/*.png  myfile.pdf

da mensaje de error:

convert-im6.q16: not authorized `myfile.pdf' @ error/constitute.c/WriteImage/1037.

¡Cualquier ayuda sería apreciada!

Respuesta1

convertes una poderosa herramienta de línea de comandos para convertir gráficos. Ghostscript proporciona soporte para PDF. Debido a una importanteagujero de seguridad en GhostscriptAntes de la versión 9.24, el uso de convertarchivos PDF se bloqueó como medida provisional. El problema se solucionó desde la versión 9.24 de Ghostscript. Si bien las versiones de Ghostscript se actualizan a versiones seguras en todas las versiones compatibles de Ubuntu (en este momento desde Ubuntu 16.04 en adelante), es posible que la restricción de uso aún esté vigente.

El archivo de política es /etc/ImageMagick-6/policy.xml. Puede editar ese archivo como usuario root para cambiar las políticas.

Eliminando todas las restricciones de uso

Para los usuarios de escritorio que no ejecutan un servidor web, simplemente eliminar estas restricciones podría ser suficiente. Para ello, se puede eliminar el archivo, pero es mejor "sacar el archivo" cambiándole el nombre. Con este comando, estás cambiando el nombre del archivo. Como resultado, se levantan todas las políticas, pero aún puedes revertirlas si es necesario:

sudo mv /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xmlout

Para volver a la situación original, simplemente cambie el nombre al nombre original:

sudo mv /etc/ImageMagick-6/policy.xmlout /etc/ImageMagick-6/policy.xml

Tenga en cuenta que sacar el archivo de política disminuye la seguridad del sistema.

Eliminando solo la restricción de combinar en PDF

Para su caso específico, gene_wood en un comentario señaló la posibilidad de relajar selectivamente la política para trabajar con archivos PDF comentando una línea:

<policy domain="coder" rights="none" pattern="PDF" />

Edite el archivo y coloque marcas de comentarios alrededor de esta línea para desactivar esta regla:

<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->

Si no desea eliminar todas las políticas de seguridad, este es el camino a seguir.

Respuesta2

Comovanadio publicado, tienes que cambiar la política de ImageMagick.

sudo vim /etc/ImageMagick-6/policy.xml

y reemplazar la línea

<policy domain="coder" rights="none" pattern="PDF" />

con

<policy domain="coder" rights="read|write" pattern="PDF" />

Si solo desea permitir la escritura y no la lectura, también puede borrar la read|parte de la línea anterior.


Por cierto, para aquellos que estén interesados ​​en la vulnerabilidad ImageMagick, aquí hay 2 enlaces informativos:

Respuesta3

En lugar de volver a aflojar las restricciones de seguridad de ImageMagick, simplemente usaríaimg2pdf.

Está diseñado específicamente para este tipo de casos de uso.

Deberías usar img2pdf si tus prioridades son (en este orden):

  • siempre sin pérdidas:la imagen incrustada en el PDF siempre tendrá exactamente la misma información de color para cada píxel que la entrada
  • pequeño:Si es posible, la diferencia de tamaño entre la imagen de entrada y el PDF de salida solo será la sobrecarga del propio contenedor de PDF.
  • rápido:Si es posible, la imagen de entrada simplemente se pega en el documento PDF tal como está, sin necesidad de volver a codificar los datos de píxeles mediante la CPU.

El software de conversión convencional (como ImageMagick) haría lo siguiente:

  1. no ser sin pérdidas porque la recodificación con pérdida a JPEG
  2. no sea pequeño porque el uso de codificación flate derrochadora de datos de píxeles sin procesar
  3. No sea rápido porque los datos de entrada se vuelven a codificar.

Otra ventaja de no tener que volver a codificar la entrada (en las situaciones más comunes) es que img2pdf puede manejar entradas mucho más grandes que otros programas, porque los datos de píxeles sin procesar nunca tienen que cargarse en la memoria.

Este debería ser el comando equivalente:

img2pdf --out myfile.pdf /home/bill/TempScan/*.png 

Si, por alguna razón, no puede hacer eso (por ejemplo, no puede instalar nuevos paquetes), otra posible vía para una conversión sin pérdidas sería convertir convertsus imágenes en un archivo TIFF de varias páginas y luego utilizarlas tiff2pdfdesde las herramientas libtiff.

Respuesta4

Aquí hay una forma aún más conveniente de obtener automáticamente la(s) ubicación(es) del(los) archivo(s) Policy.xml y realizar la búsqueda/reemplazo en todos ellos:

for file in `convert -list policy | grep "Path:" | grep -v built | sed 's/Path: \(.*\)/\1/g'`; do sed -i 's/domain="coder" rights="none" pattern="PDF"/domain="coder" rights="read|write" pattern="PDF"/g' $file; done

información relacionada