#pymupdf
Вопрос:
В настоящее время я рассматриваю возможность использования пакета python PyMuPDF для рабочего процесса, который преобразует PDF-файлы в изображения (в моем случае файлы .TIFF).
Я пытаюсь имитировать поведение другой программы, которую я в настоящее время использую для преобразования PDF -> изображений. В этой программе вы можете настроить параметры для создания изображений, как показано ниже:
Качество вывода изображения (DPI): (По умолчанию 300 точек на дюйм)
Базовый размер изображения: Исходная настройка — отображение изображения с настройками исходного документа.
Мой вопрос в том, возможно ли это в PyMuPDF? Как я могу установить значение выходного DPI для моих изображений равным 300 и установить размер изображения равным размеру исходного документа? Я довольно новичок в такого рода обработке PDF-файлов/изображений, поэтому буду очень признателен за любую помощь.
Заранее спасибо,
Ответ №1:
PyMuPDF обернут вокруг MuPDF
Он имеет множество мощных опций для работы с PDF-файлами, которые включают возможность настройки масштаба страницы и разрешения выходных изображений страниц.
Однако MuPDF поддерживает ввод Tiff, но не экспортирует изначально в одностраничный или многостраничный Tiff, поэтому потребуется дополнительное преобразование, скажем, из нескольких PNG, которые являются собственными.
Диапазон текущих входов и выходов
Input Output Description
JPEG - Joint Photographic Experts Group
BMP - Windows Bitmap
JXR - JPEG Extended Range
JPX - JPEG 2000
GIF - Graphics Interchange Format
TIFF - Tagged Image File Format
PNG PNG Portable Network Graphics
PNM PNM Portable Anymap
PGM PGM Portable Graymap
PBM PBM Portable Bitmap
PPM PPM Portable Pixmap
PAM PAM Portable Arbitrary Map
- PSD Adobe Photoshop Document
- PS Adobe Postscript
для экспорта в tiff вам нужно будет сказать PIL/Pillow в соответствии с
from PIL import Image
import fitz
pix = fitz.Pixmap(...)
img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
img.save("output.tif", "TIFF")
Однако для хранения отдельных страниц на muti-странице вам нужно будет поэкспериментировать с настройками подушек.
[Обновление]
Я вижу, вы задали этот вопрос в PyMuPDF, и для пользы других ответ был
Похоже, вы создадите так называемую «пиксельную карту» для каждой страницы и сохраните ее в виде изображения. Сам PyMuPDF поддерживает только несколько форматов вывода изображений, наиболее популярным из которых является PNG, другие-изображения типа PNM. Если вы хотите использовать другие, вы должны использовать дополнительный пакет, предположительно PIL/Pillow. PyMuPDF поддерживает Pillow напрямую с помощью методов вывода растровых изображений. Таким образом, фрагмент кода может выглядеть следующим образом:
import fitz
mat = fitz.Matrix(300 / 72, 300 / 72) # sets zoom factor for 300 dpi
doc = fitz.open("yourfile.pdf")
for page in doc:
pix = page.get_pixmap(matrix=mat)
img_filename = "page-i.tiff" % page.number
pix.pil_save(img_filename, format="TIFF", dpi=(300,300), ... more PIL parameters)
Для получения более подробной информации о выводе PIL, пожалуйста, ознакомьтесь с их документацией. Например, TIFF поддерживает несколько изображений в одном файле.