Hallo! Ich hatte die Möglichkeit, GhostScript mit Python zu verwenden, daher möchte ich diesmal die daraus gewonnenen Erkenntnisse zusammenfassen. Insbesondere wird GhostScript verwendet, um PDF in ein JPEG-Bild zu konvertieren (PDF⇒JPEG-Konvertierung). Die PDF-zu-JPEG-Konvertierung, die wir in diesem Artikel durchführen, lautet "nicht nur einseitiges PDF, sondern auch mehrseitiges PDF wird in eine Seite zerlegt und als JPEG-Bild gespeichert."
GhostScript ist ein Interpreter für die PostScript-Sprache und PDF, wie Sie auf der offiziellen Website sehen können.
Zitiert von der offiziellen Website
An interpreter for the PostScript language and for PDF.
Wenn ich Google Teacher frage, was ich in diesem Artikel tun möchte, denke ich, dass pdf2image und PyPDF2 gängige Lösungen sind, aber der Grund, warum ich GhostScript verwendet habe, ist einfach.
Weil es ein PDF gab, das nicht mit PyPDF2 und mit GhostScript lol konvertiert werden konnte
Darüber hinaus bezieht sich der Betrieb von GhostScript auf diese Site. (Diese Seite verwendet insbesondere kein Python.) http://michigawi.blogspot.com/2011/12/ghostscriptpdfjpg.html
Windows10 python3.6.9 GhostScript 9.50
Laden Sie dieses Mal GhostScript von den folgenden herunter. https://www.ghostscript.com/
Bitte laden Sie je nach Entwicklungsumgebung herunter. In diesem Artikel wird AGPL für Windows (64 Bit) ausgewählt.
Führen Sie die heruntergeladene Datei zum Einrichten aus.
Wie in "Einführung" erläutert, ist dies ein Vorgang, der für ein PDF mit mehreren Seiten erforderlich ist, und für ein PDF mit ursprünglich einer Seite nicht erforderlich. Da es lange dauern wird, habe ich nur die Teile aufgenommen, die sich auf die Division beziehen. Wenn Sie keine Zeit haben, überprüfen Sie bitte den gesamten Quellcode in den folgenden Kapiteln.
Erstellen Sie als Voraussetzung einen "Eingabe" -Ordner im selben Verzeichnis wie der Quellcode und platzieren Sie die PDF-Datei, die das Eingabebild sein soll, dort. Ein Verzeichnis mit dem Namen "output_tmp" wird automatisch erstellt und die paginierte PDF-Datei wird gespeichert.
if __name__ == "__main__":
#Holen Sie sich das aktuelle Verzeichnis
current_dir = os.getcwd()
#Eingabeverzeichnis abrufen
indir = current_dir + "\\input\\"
indir_error = current_dir + "\\input_error\\"
#Ausgabeverzeichnis abrufen
outdir = current_dir + "\\output\\"
outdir_tmp = current_dir + "\\output_tmp\\"
#Erstellen, wenn kein Ausgabeordner vorhanden ist
if os.path.isdir(outdir) == False:
os.mkdir(outdir)
if os.path.isdir(outdir_tmp) == False:
os.mkdir(outdir_tmp)
if os.path.isdir(indir_error) == False:
os.mkdir(indir_error)
#Wählen Sie ein Bild im Eingabeverzeichnis
all_images = glob.glob(indir + "*")
#Verarbeitung für jedes Bild
for img in all_images:
#Holen Sie sich den Bildnamen des Eingabebildes (mit Erweiterung)
basename = os.path.basename(img)
print(basename)
#Trennen Sie die Erweiterung vom Bildnamen des Eingabebildes
name,ext = os.path.splitext(basename)
try:
#images = convert_from_path(img)
with open(img,"rb") as pdf_file: #Obwohl img steht, handelt es sich um eine PDF-Datei, die als Eingabe verwendet wird.
source = PdfFileReader(pdf_file)
num_pages = source.getNumPages()
#Einseitiges PDF wird ausgegeben_Kopieren Sie nach tmp und fahren Sie mit dem nächsten Bild fort
if num_pages == 1:
copyfile(img,outdir_tmp + basename )
continue
for i in range(0,num_pages):
file_object = source.getPage(i)
pdf_file_name = outdir_tmp + name + "_" + str(i+1) + ".pdf"
pdf_file_writer = PdfFileWriter()
with open(pdf_file_name, 'wb') as f:
pdf_file_writer.addPage(file_object)
pdf_file_writer.write(f)
except:
print(basename + "*** error ***")
copyfile(img,indir_error + basename )
Dies läuft in GhostScript. Was ich tun möchte ① Wählen Sie die PDF-Dateien aus, die der Reihe nach in Seiten unterteilt wurden, und konvertieren Sie sie in JPEG. Der Ablauf ist so, dass der Befehl zuerst definiert und vom Unterprozessmodul ausgeführt wird.
print("***** pdf to jpg *****")
######################################
#
# pdf2jpeg(ghost script)Verwandte Einstellungen
#
######################################
exe_name = r'C:\Program Files\gs\gs9.50\bin\gswin64c.exe'
exe_option = "-dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -dJPEGQ=100 -dQFactor=1.0 -dDisplayFormat=16 -r600"
exe_outfile = "-sOutputFile="
#Wählen Sie ein Bild im Eingabeverzeichnis
all_pdfs = glob.glob(outdir_tmp + "*")
for pdf in all_pdfs:
#Holen Sie sich den Bildnamen des Eingabebildes (mit Erweiterung)
basename = os.path.basename(pdf)
print(basename)
#Trennen Sie die Erweiterung vom Bildnamen des Eingabebildes
name,ext = os.path.splitext(basename)
outputfile = outdir + name + ".jpg "
cmd_list = list()
cmd_list.append(exe_name)
cmd_list.extend(exe_option.split()) #Dies wird erweitert, nicht angehängt
cmd_list.append(exe_outfile + outputfile)
cmd_list.append(pdf)
subprocess.call(cmd_list)
import os
import glob
from PyPDF2 import PdfFileReader
from PyPDF2 import PdfFileWriter
import subprocess
from shutil import copyfile
"""
Maine
"""
if __name__ == "__main__":
#Holen Sie sich das aktuelle Verzeichnis
current_dir = os.getcwd()
#Eingabeverzeichnis abrufen
indir = current_dir + "\\input\\"
indir_error = current_dir + "\\input_error\\"
#Ausgabeverzeichnis abrufen
outdir = current_dir + "\\output\\"
outdir_tmp = current_dir + "\\output_tmp\\"
#Erstellen, wenn kein Ausgabeordner vorhanden ist
if os.path.isdir(outdir) == False:
os.mkdir(outdir)
if os.path.isdir(outdir_tmp) == False:
os.mkdir(outdir_tmp)
if os.path.isdir(indir_error) == False:
os.mkdir(indir_error)
#Wählen Sie ein Bild im Eingabeverzeichnis
all_images = glob.glob(indir + "*")
#Verarbeitung für jedes Bild
for img in all_images:
#Holen Sie sich den Bildnamen des Eingabebildes (mit Erweiterung)
basename = os.path.basename(img)
print(basename)
#Trennen Sie die Erweiterung vom Bildnamen des Eingabebildes
name,ext = os.path.splitext(basename)
try:
#images = convert_from_path(img)
with open(img,"rb") as pdf_file: #Obwohl img steht, handelt es sich um eine PDF-Datei, die als Eingabe verwendet wird.
source = PdfFileReader(pdf_file)
num_pages = source.getNumPages()
#Einseitiges PDF wird ausgegeben_Kopieren Sie nach tmp und fahren Sie mit dem nächsten Bild fort
if num_pages == 1:
copyfile(img,outdir_tmp + basename )
continue
for i in range(0,num_pages):
file_object = source.getPage(i)
pdf_file_name = outdir_tmp + name + "_" + str(i+1) + ".pdf"
pdf_file_writer = PdfFileWriter()
with open(pdf_file_name, 'wb') as f:
pdf_file_writer.addPage(file_object)
pdf_file_writer.write(f)
except:
print(basename + "*** error ***")
copyfile(img,indir_error + basename )
print("***** pdf to jpg *****")
######################################
#
# pdf2jpeg(ghost script)Verwandte Einstellungen
#
######################################
exe_name = r'C:\Program Files\gs\gs9.50\bin\gswin64c.exe'
exe_option = "-dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -dJPEGQ=100 -dQFactor=1.0 -dDisplayFormat=16 -r600"
exe_outfile = "-sOutputFile="
#Wählen Sie ein Bild im Eingabeverzeichnis
all_pdfs = glob.glob(outdir_tmp + "*")
for pdf in all_pdfs:
#Holen Sie sich den Bildnamen des Eingabebildes (mit Erweiterung)
basename = os.path.basename(pdf)
print(basename)
#Trennen Sie die Erweiterung vom Bildnamen des Eingabebildes
name,ext = os.path.splitext(basename)
outputfile = outdir + name + ".jpg "
cmd_list = list()
cmd_list.append(exe_name)
cmd_list.extend(exe_option.split())
cmd_list.append(exe_outfile + outputfile)
cmd_list.append(pdf)
subprocess.call(cmd_list)
Da der Quellcode schnell für das erstellt wurde, was ich tun wollte, wurde er ziemlich schmutziger Quellcode lol (Es ist kein Lachen)
Darüber hinaus gab es einige PDFs, die selbst mit GhostScript nicht gut in JPEG konvertiert werden konnten. Die Ursache ist nicht klar, aber nach ein wenig Recherche scheint es, dass die Schriftart sie nicht unterstützt. Ich werde je nach Antwort etwas mehr untersuchen.
Wenn Sie Fragen haben, hinterlassen Sie bitte einen Kommentar.