PyMuPDF — Как конвертировать PDF в изображение, используя настройки исходного документа для размера изображения и установив значение 300 точек на дюйм?

#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 поддерживает несколько изображений в одном файле.