Problemas com a conversão em lote de .png para .pdf usando convert

Problemas com a conversão em lote de .png para .pdf usando convert
convert /home/bill/TempScan/*.png  myfile.pdf

dá mensagem de erro:

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

Qualquer ajuda seria apreciada!

Responder1

converté uma poderosa ferramenta de linha de comando para converter gráficos. Seu suporte para PDF é fornecido pelo Ghostscript. Por causa de um significativofalha de segurança no Ghostscriptantes da versão 9.24, o uso de convertarquivos PDF foi bloqueado como um paliativo. O problema foi corrigido desde a versão 9.24 do Ghostscript. Embora as versões do Ghostscript sejam atualizadas para versões seguras em todas as versões suportadas do Ubuntu (no momento, a partir do Ubuntu 16.04), a restrição de uso ainda pode estar em vigor.

O arquivo de políticas é /etc/ImageMagick-6/policy.xml. Você pode editar esse arquivo como usuário root para alterar as políticas.

Eliminando todas as restrições de uso

Para usuários de desktop que não executam um servidor web, simplesmente eliminar essas restrições pode ser suficiente. Para isso, pode-se excluir o arquivo, mas é melhor "mover o arquivo" renomeando-o. Com este comando, você está renomeando o arquivo. Como resultado, todas as políticas serão suspensas, mas você ainda poderá reverter, se necessário:

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

Para voltar à situação original, basta renomear de volta para o nome original:

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

Esteja ciente de que mover o arquivo de política diminui a segurança do sistema.

Eliminando apenas a restrição de combinar em PDF

Para o seu caso específico, gene_wood em um comentário apontou a possibilidade de flexibilizar seletivamente a política para trabalhar com arquivos PDF comentando uma linha:

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

Edite o arquivo e coloque marcas de comentário ao redor desta linha para desabilitar esta regra:

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

Se você não deseja eliminar todas as políticas de segurança, este é o caminho a seguir.

Responder2

Comovanádio postado, você terá que alterar a política do ImageMagick.

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

e substitua a linha

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

com

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

Se você deseja permitir apenas a gravação e não a leitura, também pode apagar a read|parte da linha acima.


Aliás, para aqueles que estão interessados ​​na vulnerabilidade do ImageMagick, aqui estão 2 links informativos:

Responder3

Em vez de afrouxar novamente as restrições de segurança do ImageMagick, eu apenas usariaimg2pdf.

Ele foi projetado especificamente para esse tipo de caso de uso.

Você deve usar img2pdf se suas prioridades forem (nesta ordem):

  • sempre sem perdas:a imagem incorporada no PDF sempre terá exatamente as mesmas informações de cor para cada pixel que a entrada
  • pequeno:se possível, a diferença no tamanho do arquivo entre a imagem de entrada e o PDF de saída será apenas a sobrecarga do próprio contêiner PDF
  • rápido:se possível, a imagem de entrada é apenas colada no documento PDF como está, sem qualquer recodificação dos dados de pixel que consome muita CPU

O software de conversão convencional (como ImageMagick) iria:

  1. não será sem perdas porque a recodificação com perdas para JPEG
  2. não ser pequeno porque usar codificação flate desperdiçada de dados brutos de pixel
  3. não seja rápido porque os dados de entrada são recodificados

Outra vantagem de não ter que recodificar a entrada (nas situações mais comuns) é que o img2pdf é capaz de lidar com entradas muito maiores do que outros softwares, porque os dados brutos do pixel nunca precisam ser carregados na memória.

Este deve ser o comando equivalente:

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

Se, por algum motivo, você não puder fazer isso (por exemplo, não puder instalar novos pacotes), outro caminho potencial para conversão sem perdas seria transformar convertsuas imagens em um arquivo TIFF de várias páginas e usá-las tiff2pdfnas ferramentas libtiff.

Responder4

Aqui está uma maneira ainda mais conveniente de obter automaticamente a(s) localização(ões) do(s) arquivo(s) policy.xml e realizar a pesquisa/substituição em todos eles:

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

informação relacionada