Saltar al contenido principal
🇬🇧 English 🇧🇷 Português 🇩🇪 Deutsch
Convertidor de imágenes Convertidor de vídeo Convertidor de audio Convertidor de documentos
Herramientas Guías Formatos Precios API
Iniciar sesión
Guía

Convertir PDF a imágenes con Python: PyMuPDF, pdf2image y Pillow

PC Por Pablo Cirre

Conversiones relacionadas

Pon en práctica lo que acabas de aprender — convierte tus archivos ahora en segundos, gratis y sin registro.

Preguntas frecuentes

PyMuPDF (MuPDF debajo) es C nativo optimizado y ejecuta el render dentro del proceso Python sin llamadas a procesos externos. pdf2image llama a <code>pdftoppm</code> de Poppler como subprocess para cada PDF, con todo el overhead de fork/exec/IPC asociado. Para PDFs de 1-10 páginas la diferencia es despreciable; para batches de cientos o miles de PDFs PyMuPDF gana por orden de magnitud. Si la velocidad no es crítica, pdf2image es perfectamente adecuada y tiene la ventaja de licencia MIT.

300 DPI es el estándar para OCR de calidad — Tesseract, Google Vision, Azure OCR y AWS Textract todos están entrenados con material a esa resolución. Por debajo de 200 DPI la precisión cae notablemente (los caracteres pequeños se confunden). Por encima de 300 DPI no mejora pero el archivo crece cuadráticamente. Para texto manuscrito o caracteres muy pequeños (sentencias judiciales con cláusulas en 6pt), considera 400-600 DPI. Para PDFs de impresoras modernas con texto ya nítido, 250 DPI suele bastar.

Solo si distribuyes tu software como SaaS o on-premises a terceros — entonces tu código debe ser también AGPL. Para uso interno (script en tu empresa, herramienta personal, jupyter notebook) no aplica restricción. Si vendes una app comercial closed-source o un SaaS, tienes dos opciones: (1) comprar licencia comercial a Artifex (los autores), (2) cambiar a pdf2image (MIT) o Wand (LGPL — compatible con software comercial). Para SaaS gratuitos el AGPL implica abrir el código del servidor — riesgo que muchas empresas prefieren evitar.

Con PyMuPDF: <code>doc = fitz.open("file.pdf"); for i in [0, 5, 10]: pix = doc[i].get_pixmap(); pix.save(f"page_{i}.png")</code> — accede directamente por índice. Con pdf2image: <code>convert_from_path("file.pdf", first_page=5, last_page=10)</code> — rango contiguo. Con Wand: itera sobre <code>img.sequence[5:10]</code>. Para selecciones no contiguas (páginas 1, 7, 23, 99), PyMuPDF es la única que permite acceso aleatorio eficiente; las otras renderizan en orden y tienes que filtrar después.

PyMuPDF soporta clip rectangular nativo: <code>clip = fitz.Rect(50, 100, 400, 500) # x0, y0, x1, y1 en puntos PDF; pix = page.get_pixmap(clip=clip, dpi=300)</code>. Las coordenadas son en puntos PDF (1pt = 1/72 inch), origen arriba-izquierda. Útil para extraer solo el logo, una tabla específica, o el bloque de firma. pdf2image no tiene clip nativo — debes renderizar la página completa y recortar después con Pillow. Para extracción a escala de zonas fijas (ej. siempre el cuadro de "total a pagar" de facturas), PyMuPDF es claramente superior.

Sí, las tres extraen las imágenes embebidas en el PDF como nuevas imágenes. La diferencia: PyMuPDF y pdf2image renderizan la página completa (texto + imágenes combinados) — el resultado es una imagen de la página tal como se ve. Si el PDF es solo escaneados, la "página renderizada" es básicamente el escaneo original re-renderizado. Para extraer las imágenes embebidas SIN re-renderizar (preservando calidad original): PyMuPDF tiene <code>page.get_images(full=True)</code> que devuelve referencias a las imágenes raw del PDF, y puedes extraerlas con <code>doc.extract_image(xref)</code> manteniendo el formato y calidad originales sin re-encoding.

Usamos cookies y tecnologías similares para personalizar contenido y anuncios, y para analizar el tráfico. Más información sobre cookies.