Python: Extrae una página de un pdf como un jpeg

En el código Python, ¿cómo guardar de manera eficiente una determinada página en un pdf como un archivo jpeg? (Caso de uso: tengo un servidor web de Python Flask donde se cargarán los archivos pdf-s y las tiendas jpeg-s correspondientes a cada página).

Esta solución está cerca, pero el problema es que no convierte toda la página a jpeg.

Se puede utilizar la librería pdf2image.

Puedes instalarlo simplemente usando,

pip install pdf2image 

Una vez instalado, puedes usar el siguiente código para obtener imágenes.

 from pdf2image import convert_from_path pages = convert_from_path('pdf_file', 500) 

Guardando páginas en formato jpeg

 for page in pages: page.save('out.jpg', 'JPEG') 

Edición: el repository de Github pdf2image también menciona que usa pdftoppm y que requiere otras instalaciones:

pdftoppm es la pieza de software que hace la magia real. Se distribuye como parte de un paquete mayor llamado poppler . Los usuarios de Windows deberán instalar poppler para Windows . Los usuarios de Mac deberán instalar Poppler para Mac . Los usuarios de Linux tendrán pdftoppm preinstalado con la distribución (Probado en Ubuntu y Archlinux) si no lo está, ejecute sudo apt install poppler-utils .

Aquí está la instalación adecuada para Windows: http://blog.alivate.com.au/poppler-windows/

La biblioteca de Python pdf2image (utilizada en la otra respuesta) de hecho no hace mucho más que lanzar pdttoppm con subprocess.Popen , así que aquí hay una versión corta que lo hace directamente:

 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 

Aquí está el enlace de instalación de Windows para pdftoppm (contenido en un paquete llamado poppler): http://blog.alivate.com.au/poppler-windows/

@gaurwraith, instale poppler para Windows y use pdftoppm.exe de la siguiente manera:

  1. Descargue el archivo zip con los últimos binarios / dlls de Poppler desde http://blog.alivate.com.au/poppler-windows/ y descomprima en una nueva carpeta en su carpeta de archivos de progtwig. Por ejemplo: “C: \ Archivos de progtwig (x86) \ Poppler”.

  2. Agregue “C: \ Archivos de progtwig (x86) \ Poppler \ poppler-0.68.0 \ bin” a su variable de entorno SYSTEM PATH.

  3. Desde la línea cmd, instale el módulo pdf2image -> “pip install pdf2image”.

  4. O alternativamente, ejecute directamente pdftoppm.exe desde su código usando el módulo de subproceso de Python como lo explica el usuario Basj.

@vishvAs vAsuki, este código debe generar los jpgs que desee a través del módulo de subproceso para todas las páginas de uno o más archivos PDF en una carpeta determinada:

 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)) 

O usando el módulo 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") 

No es necesario instalar Poppler en su sistema operativo. Esto funcionará:

pip instalar varita

 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) 

Encontré esta solución simple, PyMuPDF, salida a archivo 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) 

Se trata de una utilidad llamada pdftojpg que se puede utilizar para convertir el pdf a img

Puede encontrar el código aquí 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)