pythonコードで、pdfの特定のページをjpegファイルとして効率的に保存する方法は? (ユースケース:pdf-sがアップロードされ、各ページに対応するjpeg-sが格納されるpython flask Webサーバーを持っています。)
このソリューション は近いですが、問題はページ全体をjpegに変換しないことです。
Pdf2imageライブラリを使用できます。
以下を使用して簡単にインストールできます。
pip install pdf2image
インストールしたら、次のコードを使用して画像を取得できます。
from pdf2image import convert_from_path
pages = convert_from_path('pdf_file', 500)
ページをjpeg形式で保存する
for page in pages:
page.save('out.jpg', 'JPEG')
編集:Githubリポジトリ pdf2image は、pdftoppm
を使用し、他のインストールが必要であることにも言及しています。
pdftoppmは、実際の魔法を行うソフトウェアです。 poppler と呼ばれるより優れたパッケージの一部として配布されます。 Windowsユーザーは、 poppler for Windows をインストールする必要があります。 Macユーザーは Mac用poppler をインストールする必要があります。 Linuxユーザーは、pdftoppmがディストリビューション(UbuntuおよびArchlinuxでテスト済み)でプリインストールされています。インストールされていない場合は、
Sudo apt install poppler-utils
を実行します。
Windowsの適切なインストールを次に示します。 http://blog.alivate.com.au/poppler-windows/
Pythonライブラリpdf2image
(他の回答で使用)は実際にはしません 起動するだけではありませんpdttoppm
with subprocess.Popen
、ここに直接それを行う短いバージョンがあります:
PDFTOPPMPATH = r"D:\Documents\software\____PORTABLE\poppler-0.51\bin\pdftoppm.exe"
PDFFILE = "SKM_28718052212190.pdf"
import subprocess
subprocess.Popen('"%s" -png "%s" out' % (PDFTOPPMPATH, PDFFILE)) #have updated the values here
pdftoppm
(popplerという名前のパッケージに含まれる)のWindowsインストールリンクを次に示します。 http://blog.alivate.com.au/poppler-windows/
OSにPopplerをインストールする必要はありません。これは動作します:
pip install Wand
from wand.image import Image
with(Image(filename="somefile.pdf", resolution=120)) as source:
images = source.sequence
pages = len(images)
for i in range(pages):
n = i + 1
newfilename = f[:-4] + str(n) + '.jpeg'
Image(images[i]).save(filename=newfilename)
@gaurwraith、Windows用popplerをインストールし、pdftoppm.exeを次のように使用します:
http://blog.alivate.com.au/poppler-windows/ からPopplerの最新のバイナリ/ dllを含むZipファイルをダウンロードし、プログラムファイルフォルダーの新しいフォルダーに解凍します。例:「C:\ Program Files(x86)\ Poppler」。
SYSTEM PATH環境変数に「C:\ Program Files(x86)\ Poppler\poppler-0.68.0\bin」を追加します。
Cmd行からpdf2imageモジュールをインストール-> "pip install pdf2image"。
@vishvAs vAsuki、このコードは、指定されたフォルダー内の1つまたは複数のpdfのすべてのページのサブプロセスモジュールを介して、必要なjpgを生成する必要があります。
import os, subprocess
pdf_dir = r"C:\yourPDFfolder"
os.chdir(pdf_dir)
pdftoppm_path = r"C:\Program Files (x86)\Poppler\poppler-0.68.0\bin\pdftoppm.exe"
for pdf_file in os.listdir(pdf_dir):
if pdf_file.endswith(".pdf"):
subprocess.Popen('"%s" -jpeg %s out' % (pdftoppm_path, pdf_file))
または、pdf2imageモジュールを使用します。
import os
from pdf2image import convert_from_path
pdf_dir = r"C:\yourPDFfolder"
os.chdir(pdf_dir)
for pdf_file in os.listdir(pdf_dir):
if pdf_file.endswith(".pdf"):
pages = convert_from_path(pdf_file, 300)
pdf_file = pdf_file[:-4]
for page in pages:
page.save("%s-page%d.jpg" % (pdf_file,pages.index(page)), "JPEG")
この簡単な解決策、PyMuPDF、pngファイルへの出力を見つけました
import fitz
pdffile = "infile.pdf"
doc = fitz.open(pdffile)
page = doc.loadPage(0) #number of page
pix = page.getPixmap()
output = "outfile.png"
pix.writePNG(output)
私はpdf2imageの(たぶん)もっとシンプルなオプションを使用します:
cd $dir
for f in *.pdf
do
if [ -f "${f}" ]; then
n=$(echo "$f" | cut -f1 -d'.')
pdftoppm -scale-to 1440 -png $f $conv/$n
rm $f
mv $conv/*.png $dir
fi
done
これは、狭いキャストデバイスを使用するためのループ内のbashスクリプトの小さな部分です。追加されたpdfファイル(すべて)を5秒ごとにチェックして処理します。これはデモデバイス用で、最後に変換はリモートサーバーで行われます。現在、.PNGに変換していますが、.JPGも可能です。
この変換は、ビデオ、2つの滑らかなスクロールテキスト、ロゴ(3つのバージョンの移行あり)を表示するA4形式のトランジションとともに、Pi3をほぼ4x 100%cpu-loadに設定します;-)
彼らはpdfをjpgに変換するために使用できるpdftojpgと呼ばれるユーティリティです
ここでコードを見つけることができます https://github.com/pankajr141/pdf2jpg
from pdf2jpg import pdf2jpg
inputpath = r"D:\inputdir\pdf1.pdf"
outputpath = r"D:\outputdir"
# To convert single page
result = pdf2jpg.convert_pdf2jpg(inputpath, outputpath, pages="1")
print(result)
# To convert multiple pages
result = pdf2jpg.convert_pdf2jpg(inputpath, outputpath, pages="1,0,3")
print(result)
# to convert all pages
result = pdf2jpg.convert_pdf2jpg(inputpath, outputpath, pages="ALL")
print(result)