convert を使用して .png を .pdf に一括変換する際の問題

convert を使用して .png を .pdf に一括変換する際の問題
convert /home/bill/TempScan/*.png  myfile.pdf

エラーメッセージが表示されます:

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

ご協力いただければ幸いです。

答え1

convertは、グラフィックスを変換するための強力なコマンドラインツールです。PDFのサポートはGhostscriptによって提供されています。Ghostscript のセキュリティホールバージョン 9.24 より前では、convertPDF ファイルでの の使用は暫定的にブロックされていました。この問題は Ghostscript バージョン 9.24 以降で修正されています。サポートされているすべての Ubuntu バージョン (現時点では Ubuntu 16.04 以降) で Ghostscript バージョンが安全なバージョンに更新されていますが、使用制限は引き続き適用される可能性があります。

ポリシー ファイルは です/etc/ImageMagick-6/policy.xml。ポリシーを変更するには、root ユーザーとしてそのファイルを編集できます。

あらゆる使用制限の撤廃

Web サーバーを実行していないデスクトップ ユーザーの場合、これらの制限を単に削除するだけで十分です。そのためには、ファイルを削除することもできますが、名前を変更して「ファイルを移動」する方がよいでしょう。このコマンドでは、ファイルの名前を変更します。その結果、すべてのポリシーが解除されますが、必要に応じて元に戻すことができます。

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

元の状況に戻すには、元の名前に戻すだけです。

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

ポリシー ファイルを移動するとシステムのセキュリティが低下することに注意してください。

PDFに結合するための制限のみを排除

あなたの特定のケースでは、gene_wood はコメントで、1 行をコメントアウトすることで PDF ファイルの操作に関するポリシーを選択的に緩和できる可能性を指摘しました。

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

ファイルを編集し、この行の前後にコメント マークを付けてこのルールを無効にします。

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

すべてのセキュリティ ポリシーを削除したくない場合は、これが最適な方法です。

答え2

としてバナジウム投稿、ImageMagick ポリシーを変更する必要があります。

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

そして、行を置き換えます

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

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

書き込みのみを許可し、読み取りは許可しない場合は、read|上記の行の部分を消去することもできます。


ちなみに、ImageMagick の脆弱性に興味のある人のために、次の 2 つの情報リンクを示します。

答え3

ImageMagickのセキュリティ制限を再度緩和するのではなく、画像2pdf

この種のユースケース向けに特別に設計されています。

優先順位が以下の場合は、img2pdf を使用する必要があります (次の順序で)。

  • 常にロスレス:PDFに埋め込まれた画像は、入力された画像と常に同じ色情報をすべてのピクセルに持つ。
  • 小さい:可能であれば、入力画像と出力PDFのファイルサイズの差はPDFコンテナ自体のオーバーヘッドのみになります。
  • 速い:可能であれば、CPUを大量に消費するピクセルデータの再エンコードを行わずに、入力画像をそのままPDF文書に貼り付けます。

従来の変換ソフトウェア (ImageMagick など) では、次のいずれかが行われます。

  1. JPEGへの非可逆再エンコードのため、ロスレスではない
  2. 生のピクセルデータを無駄にフラットエンコードしているため小さくならない
  3. 入力データが再エンコードされるため高速ではない

入力を再エンコードする必要がないことのもう 1 つの利点 (ほとんどの一般的な状況) は、生のピクセル データをメモリにロードする必要がないため、img2pdf は他のソフトウェアよりもはるかに大きな入力を処理できることです。

これは同等のコマンドになります:

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

何らかの理由でそれができない場合 (新しいパッケージをインストールできないなど)、ロスレス変換の別の方法として、convert画像を複数ページの TIFF ファイルに変換し、tiff2pdflibtiff ツールから使用することが考えられます。

答え4

policy.xml ファイルの場所を自動的に取得し、それらすべてに対して検索/置換を実行する、さらに便利な方法を次に示します。

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

関連情報