やりたいこと
複数のpngファイルを1つのpdfにまとめたい
環境
Lubuntu20.04(VirtualBox)
下準備
ImageMagick をインストール
sudo apt install imagemagick-6.q16
ImageMagickの環境設定
/etc/ImageMagick-6/policy.xml
の設定値を変更
resource
画像ファイルが中途半端に結合されていて「きっと、作業領域が狭かったんだろう。」ということで、数値を適当に増やしていきました。
結構 増やしたつもりでも足りないケースがあり、最終的に「えーい、もういいや ビックリするくらい多くとってしまおう」という結果が以下。*1
coder
none
をread|write
に変更
これもPDFだけで良いはずですが、とりあえず適当にザクザク設定変更
<policymap> <!-- <policy domain="system" name="shred" value="2"/> --> <!-- <policy domain="system" name="precision" value="6"/> --> <!-- <policy domain="system" name="memory-map" value="anonymous"/> --> <!-- <policy domain="system" name="max-memory-request" value="256MiB"/> --> <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> --> <policy domain="resource" name="memory" value="3GiB"/> <policy domain="resource" name="map" value="3GiB"/> <policy domain="resource" name="width" value="16KP"/> <policy domain="resource" name="height" value="16KP"/> <!-- <policy domain="resource" name="list-length" value="128"/> --> <policy domain="resource" name="area" value="3GiB"/> <policy domain="resource" name="disk" value="3GiB"/> <!-- <policy domain="resource" name="file" value="768"/> --> <!-- <policy domain="resource" name="thread" value="4"/> --> <!-- <policy domain="resource" name="throttle" value="0"/> --> <!-- <policy domain="resource" name="time" value="3600"/> --> <!-- <policy domain="coder" rights="none" pattern="MVG" /> --> <!-- <policy domain="module" rights="none" pattern="{PS,PDF,XPS}" /> --> <!-- <policy domain="delegate" rights="none" pattern="HTTPS" /> --> <!-- <policy domain="path" rights="none" pattern="@*" /> --> <!-- <policy domain="cache" name="memory-map" value="anonymous"/> --> <!-- <policy domain="cache" name="synchronize" value="True"/> --> <!-- <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/> --> <!-- <policy domain="system" name="pixel-cache-memory" value="anonymous"/> --> <!-- <policy domain="system" name="shred" value="2"/> --> <!-- <policy domain="system" name="precision" value="6"/> --> <!-- not needed due to the need to use explicitly by mvg: --> <!-- <policy domain="delegate" rights="none" pattern="MVG" /> --> <!-- use curl --> <policy domain="delegate" rights="none" pattern="URL" /> <policy domain="delegate" rights="none" pattern="HTTPS" /> <policy domain="delegate" rights="none" pattern="HTTP" /> <!-- in order to avoid to get image with password text --> <policy domain="path" rights="none" pattern="@*"/> <!-- disable ghostscript format types --> <policy domain="coder" rights="read|write" pattern="PS" /> <policy domain="coder" rights="none" pattern="PS2" /> <policy domain="coder" rights="none" pattern="PS3" /> <policy domain="coder" rights="read|write" pattern="EPS" /> <policy domain="coder" rights="read|write" pattern="PDF" /> <policy domain="coder" rights="read|write" pattern="XPS" /> </policymap>
実行シェルスクリプト
#!/bin/sh # パラメータ指定しない場合は、実行shと同列のフォルダ配下全てのpngファイルをpdfにまとめる # pdfファイル名はフォルダ名 # temp.pdfを一気にファイル名指定ができたら良いんだけど、ちょっとわからない。 # 結果としては、親フォルダ配下にマージしたPDFを集めるということで良しとする echo "Start ..............." CURRENT_DIR=`dirname $0` if [ $# = 1 ]; then CURRENT_DIR=$1 fi items=$CURRENT_DIR/* for item in $items; do if [ -d ${item} ]; then cd ${item} DIR_NAME=`basename ${item}` echo $DIR_NAME ls *.png | sort -n | tr '\n' ' ' | sed 's/$/\ temp.pdf/' | xargs convert mv -f temp.pdf ../${DIR_NAME}.pdf fi done echo "............. All Done"
参考
Ubuntu18.04 ImageMagick convertで、not authorized xxx.pdf エラー | Ninton
「さようなら ImageMagick」の考察 #ImageMagick - Qiita
さいごに
ImageMagickは脆弱性で色々と問題はあるみたいなので ご利用は自己責任で*2。