Wie kann man im Python-Code eine bestimmte Seite in einer PDF-Datei effizient als JPEG-Datei speichern? (Anwendungsfall: Ich habe einen Python-Flaschen-Webserver, auf dem die PDF-Dateien hochgeladen werden und die entsprechenden JPEG-Seiten gespeichert werden.)
Diese Lösung ist nahe, aber das Problem ist, dass nicht die gesamte Seite in JPEG konvertiert wird.
Die pdf2image-Bibliothek kann verwendet werden.
Sie können es einfach installieren, indem Sie
pip install pdf2image
Nach der Installation können Sie folgenden Code verwenden, um Bilder abzurufen.
from pdf2image import convert_from_path
pages = convert_from_path('pdf_file', 500)
Speichern von Seiten im JPEG-Format
for page in pages:
page.save('out.jpg', 'JPEG')
Edit: Das Github-Repo pdf2image erwähnt auch, dass es pdftoppm
verwendet und dass es andere Installationen erfordert:
pdftoppm ist die Software, die die eigentliche Magie ausübt. Es wird als Teil eines größeren Pakets mit dem Namen poppler ..__ verteilt. Windows-Benutzer müssen poppler für Windows ..__ installieren. Mac - Benutzer müssen poppler für Mac ..__ installieren. Linux-Benutzer haben pdftoppm mit der Distribution vorinstalliert (Tested on Ubuntu und Archlinux), falls dies nicht der Fall ist, führen Sie
Sudo apt install poppler-utils
aus.
Hier ist die richtige Installation für Windows: http://blog.alivate.com.au/poppler-windows/
Die Python-Bibliothek pdf2image
(die in der anderen Antwort verwendet wird) führt in der Tat nicht viel mehr als nur das Startenpdttoppm
mit subprocess.Popen
aus. Hier ist eine kurze Version, die das direkt macht:
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
Hier ist der Windows-Installationslink für pdftoppm
(in einem Paket namens poppler enthalten): http://blog.alivate.com.au/poppler-windows/
Ich fand diese einfache Lösung, PyMuPDF, als Ausgabe in eine PNG-Datei
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)
@gaurwraith, install poppler für Windows und verwende pdftoppm.exe wie folgt:
Laden Sie die ZIP-Datei mit den neuesten Binärdateien/dlls von Poppler von http://blog.alivate.com.au/poppler-windows/ - herunter und entpacken Sie sie in einen neuen Ordner in Ihrem Programmordner. Zum Beispiel: "C:\Programme (x86)\Poppler".
Fügen Sie der Umgebungsvariable SYSTEM PATH "C:\Programme (x86)\Poppler\poppler-0.68.0\bin" hinzu.
Von cmd line installieren Sie das Modul pdf2image -> "pip install pdf2image".
@vishvAs vAsuki, dieser Code sollte die gewünschten JPGs über das Unterprozessmodul für alle Seiten eines oder mehrerer PDF-Dateien in einem bestimmten Ordner generieren:
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))
Oder mit dem pdf2image-Modul:
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")
Sie müssen Poppler nicht auf Ihrem Betriebssystem installieren. Das wird funktionieren:
pip installiere 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)
Ich benutze eine (vielleicht) viel einfachere Option von 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
Dies ist ein kleiner Teil eines Bash-Skripts in einer Schleife für die Verwendung eines Narrow Casting-Geräts. Überprüft alle 5 Sekunden alle hinzugefügten PDF-Dateien und verarbeitet sie. Dies ist für ein Demo-Gerät, am Ende wird die Konvertierung auf einem Remote-Server durchgeführt. Die Konvertierung in .PNG ist jetzt möglich, aber auch .JPG.
Diese Konvertierung, zusammen mit Übergängen im A4-Format, die ein Video, zwei flüssige Lauftexte und ein Logo (mit Übergang in drei Versionen) anzeigt, setzt den Pi3 auf fast 4x 100% CPU-Auslastung ;-)
Es handelt sich um ein Hilfsprogramm namens pdftojpg, mit dem das PDF in das IMG-Format konvertiert werden kann
Den Code finden Sie hier 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)