salut! J'ai eu l'occasion d'utiliser GhostScript avec python, donc cette fois j'aimerais résumer les résultats que j'en ai tirés. Plus précisément, GhostScript est utilisé pour convertir un PDF en image JPEG (conversion PDF⇒JPEG). La conversion PDF-JPEG que nous allons faire dans cet article est "non seulement un PDF d'une page, mais également un PDF de plusieurs pages est décomposé en une page et enregistré en tant qu'image JPEG".
GhostScript est un interpréteur pour le langage PostScript et PDF, comme vous pouvez le voir sur le site officiel.
Cité sur le site officiel
An interpreter for the PostScript language and for PDF.
Quand je demande à un enseignant google ce que je veux faire dans cet article, je pense que pdf2image et PyPDF2 sont des solutions courantes, mais la raison pour laquelle j'ai utilisé GhostScript est simple.
Parce qu'il y avait un PDF qui ne pouvait pas être converti avec PyPDF2 et pouvait être converti avec GhostScript lol
De plus, le fonctionnement de GhostScript fait référence à ce site. (Ce site n'utilise pas de python en particulier.) http://michigawi.blogspot.com/2011/12/ghostscriptpdfjpg.html
Windows10 python3.6.9 GhostScript 9.50
Cette fois, téléchargez GhostScript à partir de ce qui suit. https://www.ghostscript.com/
Veuillez télécharger en fonction de chaque environnement de développement. Dans cet article, AGPL pour Windows (64 bits) est sélectionné.
Exécutez le fichier téléchargé à configurer.
<détails>
Comme expliqué dans "Introduction", ce processus est requis pour un PDF de plusieurs pages et n'est pas nécessaire pour un PDF d'une page.
Comme ce sera long, je n'ai ramassé que les pièces liées à la division.
Si vous n'avez pas le temps, veuillez vérifier l'intégralité du code source dans les chapitres suivants. Au préalable, créez un dossier «input» dans le même répertoire que le code source, et placez-y le fichier PDF qui sera l'image d'entrée.
Un répertoire appelé "output_tmp" est automatiquement créé et le fichier PDF paginé est enregistré. Cela fonctionne dans GhostScript.
Ce que je veux faire ① Sélectionnez les fichiers PDF qui ont été divisés en pages dans l'ordre et convertissez-les au format JPEG.
Le flux est tel que la commande est définie en premier et exécutée par le module de sous-processus. Parce que le code source a été créé rapidement pour ce que je voulais faire, il est devenu un code source assez sale lol
(Ce n'est pas un rire) De plus, certains fichiers PDF ne pouvaient pas être correctement convertis en JPEG, même avec GhostScript.
La cause n'est pas claire, mais après un peu de recherche, il semble que la police ne la supporte pas.
En fonction de la réponse, je vais enquêter un peu plus. Si vous avez des questions, laissez un commentaire.
Recommended Posts
Ce que vous voulez faire Split: Divisez la page PDF
if __name__ == "__main__":
#Obtenez le répertoire actuel
current_dir = os.getcwd()
#Obtenir le répertoire d'entrée
indir = current_dir + "\\input\\"
indir_error = current_dir + "\\input_error\\"
#Obtenir le répertoire de sortie
outdir = current_dir + "\\output\\"
outdir_tmp = current_dir + "\\output_tmp\\"
#Créer s'il n'y a pas de dossier de sortie
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)
#Sélectionnez une image dans le répertoire d'entrée
all_images = glob.glob(indir + "*")
#Traitement pour chaque image
for img in all_images:
#Obtenez le nom de l'image de l'image d'entrée (avec l'extension)
basename = os.path.basename(img)
print(basename)
#Séparez l'extension du nom d'image de l'image d'entrée
name,ext = os.path.splitext(basename)
try:
#images = convert_from_path(img)
with open(img,"rb") as pdf_file: #Bien qu'il dise img, c'est un fichier PDF qui est utilisé comme entrée.
source = PdfFileReader(pdf_file)
num_pages = source.getNumPages()
#Un PDF d'une seule page est sorti_Copiez vers tmp et passez à l'image suivante
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 )
Ce que vous voulez faire: Convertir un PDF en image JPEG
print("***** pdf to jpg *****")
######################################
#
# pdf2jpeg(ghost script)Paramètres associés
#
######################################
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="
#Sélectionnez une image dans le répertoire d'entrée
all_pdfs = glob.glob(outdir_tmp + "*")
for pdf in all_pdfs:
#Obtenez le nom de l'image de l'image d'entrée (avec l'extension)
basename = os.path.basename(pdf)
print(basename)
#Séparez l'extension du nom d'image de l'image d'entrée
name,ext = os.path.splitext(basename)
outputfile = outdir + name + ".jpg "
cmd_list = list()
cmd_list.append(exe_name)
cmd_list.extend(exe_option.split()) #C'est étendre, pas ajouter
cmd_list.append(exe_outfile + outputfile)
cmd_list.append(pdf)
subprocess.call(cmd_list)
L'ensemble
import os
import glob
from PyPDF2 import PdfFileReader
from PyPDF2 import PdfFileWriter
import subprocess
from shutil import copyfile
"""
Principale
"""
if __name__ == "__main__":
#Obtenez le répertoire actuel
current_dir = os.getcwd()
#Obtenir le répertoire d'entrée
indir = current_dir + "\\input\\"
indir_error = current_dir + "\\input_error\\"
#Obtenir le répertoire de sortie
outdir = current_dir + "\\output\\"
outdir_tmp = current_dir + "\\output_tmp\\"
#Créer s'il n'y a pas de dossier de sortie
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)
#Sélectionnez une image dans le répertoire d'entrée
all_images = glob.glob(indir + "*")
#Traitement pour chaque image
for img in all_images:
#Obtenez le nom de l'image de l'image d'entrée (avec l'extension)
basename = os.path.basename(img)
print(basename)
#Séparez l'extension du nom d'image de l'image d'entrée
name,ext = os.path.splitext(basename)
try:
#images = convert_from_path(img)
with open(img,"rb") as pdf_file: #Bien qu'il dise img, c'est un fichier PDF qui est utilisé comme entrée.
source = PdfFileReader(pdf_file)
num_pages = source.getNumPages()
#Un PDF d'une seule page est sorti_Copiez vers tmp et passez à l'image suivante
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)Paramètres associés
#
######################################
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="
#Sélectionnez une image dans le répertoire d'entrée
all_pdfs = glob.glob(outdir_tmp + "*")
for pdf in all_pdfs:
#Obtenez le nom de l'image de l'image d'entrée (avec l'extension)
basename = os.path.basename(pdf)
print(basename)
#Séparez l'extension du nom d'image de l'image d'entrée
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)
à la fin