web-dev-qa-db-ja.com

コマンドラインからPDFを生成し、ページをできるだけ多くの画像のコピーで埋めますか?

私はこれをたくさん探していましたが、解決策を見つけることができませんでした。

任意の用紙フォーマット(A4など)でPDFを生成し、そのページをできるだけ多くの画像のコピーで埋めるにはどうすればよいですか?

ImageMagick、Poppler、Ghostscriptなどのプログラムを使用したCLIソリューションを探しています。

私の使用例:オフィスのゲストWi-Fiのパスワードを変更し、ニースA4 PDFタイトなグリッドで構成され、各セルにネットワークSSIDとWPAキーが含まれています。印刷するために、訪問するゲストに配られる断片にカットされます。

それを行う方法を見つけることができず、MSWordを使用してページに小さな画像を手動で貼り付けることにしました。

編集:これらの小さな画像がどのように見えたか。テキストエディタに入力して、テキストのスクリーンショットを作成しました。

enter image description here

このパスワードは3か月に1回変更するので、自動化されたスクリプト可能なソリューションが必要です。完璧である必要はありませんが、迅速である必要があります。

2
zool

質問に投稿したJPGファイルの例 の画像のサイズなどに基づいて、右クリックして名前を付けて画像を保存...を選択すると、保存されたファイル画像属性リストとして。 。 。

  • 寸法:2850 x 1237
  • 幅:2850 pixels
  • 高さ:1237 pixels

enter image description here

以下に概説する ImageMagick を使用して、以下のメソッド/コマンドを使用して、これらの画像のうち24個を1つの画像ファイルに圧縮することができました。期待される結果を得るために元の画像の「x」個をコピーするためのロジックは提供しませんが、そのようなタスクは簡単であり、その部分のヘルプや例は必要ないと思います。お知らせ下さい。


詳細な手順。 。 。

リマインダー:ファイルをコピーまたは削除するためのロジックを提供していません。これらのタイプの操作が必要であると述べ、それを解決できると想定していますが、それ以外の場合はお知らせください。

  1. SSIDおよびWPAキーイメージファイル の複数のコピーを/folderのどこかに作成して、最初のImageMagickコマンドを実行する合計6つのイメージを作成する必要があります。

  2. これらの6つの画像ファイルが/folderにある場合、それらに対してこのコマンドを実行して、私の例ではout.jpgという名前の新しい出力ファイルを作成します。

    convert /folder/*.jpg -gravity center -append /output/out.jpg
    
  3. ここで、6つの元の「SSIDおよびWPAキーイメージ」ファイルを削除してから、新しいout.jpg/folderにコピーし、/folderに合計4つのファイルができるまでコピーして、次のコマンドを実行します。

    convert /folder/*.jpg -gravity center +append /output/nout.jpg
    
  4. 次に、#3でコピーした/output内のこれらのファイルの4つのコピーを削除し、上記のコマンドで作成された新しく作成されたnout.jpgに対してこのコマンドを実行して、ページa4形式のファイルを取得できます。

    convert /output/nout.jpg -page a4 /output/print.jpg
    
  5. 次に、print.jpg画像ファイルを印刷し、見栄えが良いことを確認し、切り取り、パスアウトします。

    enter image description here

注:開始画像の画像の寸法などが異なり、最終結果で適切にスケールアウトされない場合は、各ステップごとに「x」個の画像を試してみてください。参照され、それらの画像に対してコマンドを実行したら、相関する出力ファイルを開き、各ステップに必要な「x」番号を把握できるかどうかを確認します。これをテストするのはタイムリーかもしれませんが、理解するのと同じくらい簡単なもう1つの簡単な作業です。


その他のリソース

2
Pimp Juice IT

Pandocと出力PDFの助けを借りてそれを行うことができます。

最初の方法:画像ではなく、1行のテキストをMarkdownにマルチペーストします

画像をMSWord文書に貼り付ける代わりに、この行を呼び出すテキストファイルに貼り付けることもできますmy-markdown.md

![](https://i.stack.imgur.com/l9TLd.jpg) { width="33%" }

これにより、1行に3つの画像が配置されます。もちろん、幅を任意の値に変更できます。私の推測では、width="33%"を使用する場合は60の同一行で、width="24%"を使用する場合は112の同一行で実行できます(1行あたり4画像) 。

'任意の用紙フォーマット(たとえばA4)'が必要だったので、ほぼA4の例を示します。次のようにPDFに変換する必要があります:

pandoc          \
  -o images.pdf \
  -V geometry="paperwidth=580pt, paperheight=848pt, margin=10pt" \
     images.md 

スクリーンショット:

enter image description here

2番目の方法:すべてを1つのコマンドラインで実行する

現在利用可能なWindowsシステムがないため、Powershellまたはcmd.exeで確認およびテストできるので、Linux/macOSBashの例を示します。

for i in {1..112} ; do
    echo '![](https://i.stack.imgur.com/l9TLd.jpg){ width="24%" }' ;
done \
|    \
pandoc -V geometry="paperwidth=580pt, paperheight=848pt, margin=10pt" \
       -o images2.pdf \
       -

上記の最初の部分は同じ行を112回<stdout>に書き込みますが、Markdownファイルを書き出さずにさらに処理するためにPandocの<stdin>にパイプします。

enter image description here

1
Kurt Pfeifle