現在のディレクトリのすべてのPDFをPNGに変換

現在のディレクトリのすべてのPDFをPNGに変換

.pdf現在のディレクトリ内のすべてのファイルをファイルに変換するBashスクリプトを作成したいと思います.png

たとえば、

$ls .
a.pdf b.pdf

$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png

最善の試みは次のとおりです。

#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png

答え1

お持ちの場合本物奇妙な名前、改行やバックスラッシュなどを含む名前は、次のようにすることができます。

find . -type f -name '*.pdf' -print0 |
  while IFS= read -r -d '' file
    do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
  done

あなたが投げるすべてを処理できるはずです。

使用のヒント:

  • find ... -print0find結果はヌル文字で区切られて印刷されるため、改行文字を処理できます。
  • IFS=: スペースを処理するための単語分割を無効にします。
  • read -r:バックスラッシュを含むファイルを処理するときにバックスラッシュエスケープ文字の解釈を無効にします。
  • read -d '':findの出力を処理し、改行文字を含むファイル名を正しく処理するには、レコード区切り文字をNULL文字に設定します。
  • ${file%.*}.png:シェルに組み込まれている機能を使用します。文字列操作機能拡張機能を削除してください。

答え2

for次のようにbashループを使用できます。

#!/bin/bash
for pdfile in *.pdf ; do
  convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done

答え3

mogrifyバッチ変換を使用して、.pdf現在のディレクトリのすべてのサイズを変更できます。

mogrify -verbose -density 500 -resize 800 -format png ./*.pdf

別のformat(この場合-format png)を使用すると、元の.pdfファイルは変更されず、出力ファイルの名前は同じですが、拡張子は指定された拡張子に変更されますformat

答え4

Bashの使用に限定されない場合は、Pythonスクリプトを使用して.pdf現在のディレクトリ内のすべてのファイルを高解像度.png画像に変換できます。他の入力/出力画像タイプまたはconvert

#! /usr/bin/env python

import os

def main():
    dir_list = os.listdir('.')
    for full_file_name in dir_list:
        base_name, extension = os.path.splitext(full_file_name)
        if extension == '.pdf': # then .pdf file --> convert to image!
            cmd_str = ' '.join(['convert',
                                '-density 400',
                                full_file_name,
                                base_name + '.png'])
            print(cmd_str)  # echo command to terminal
            os.system(cmd_str)  # execute command

if __name__ == '__main__':
    main()

関連情報