Как с помощью Python преобразовать pdf‑файлы в картинки

Ещё одно вечернее развлечение посвящаю разработке легкого инструмента командной строки для преобразования файлов PDF в картинки.

Будем использовать PyMuPDF, универсальное настраиваемое решение для интерпретатора PDF, XPS и электронных книг, которое можно использовать в широком спектре приложений, таких как средство визуализации PDF, средство просмотра или набор инструментов.

Для начала установим необходимую библиотеку:

$ pip install PyMuPDF==1.18.9

Импорт библиотек:

import fitz

from typing import Tuple
import os

Определим нашу основную функцию:

def convert_pdf2img(input_file: str, pages: Tuple = None):
    """Преобразует PDF в изображение и создает файл за страницей"""
    # Open the document
    pdfIn = fitz.open(input_file)
    output_files = []
    # Полистаем страницы
    for pg in range(pdfIn.pageCount):
        if str(pages) != str(None):
            if str(pg) not in str(pages):
                continue
        # Выберем страницу
        page = pdfIn[pg]
        rotate = int(0)
        # PDF Страница конвертируется в целое изображение 1056 * 816, а затем для каждого изображения делается снимок экрана.
        # zoom = 1.33333333 -----> Размер изображения = 1056 * 816
        # zoom = 2 ---> 2 * Разрешение по умолчанию (текст четкий, текст изображения плохо читается) = маленький размер файла/размер изображения = 1584 * 1224
        # zoom = 4 ---> 4 * Разрешение по умолчанию (текст четкий, текст изображения плохо читается) = большой размер файла
        # zoom = 8 ---> 8 * Разрешение по умолчанию (текст четкий, текст изображения читается) = большой размер файла
        zoom_x = 2
        zoom_y = 2
        # Коэффициент масштабирования равен 2, чтобы текст был четким
        # Pre-rotate - это вращение при необходимости.
        mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
        pix = page.getPixmap(matrix=mat, alpha=False)
        output_file = f"{os.path.splitext(os.path.basename(input_file))[0]}_page{pg+1}.png"
        pix.writePNG(output_file)
        output_files.append(output_file)
    pdfIn.close()
    summary = {
        "Исходный файл": input_file, "Страниц": str(pages), "Выходной файл(ы)": str(output_files)
    }
    # Printing Summary
    print("#### Отчет ########################################################")
    print("\n".join("{}:{}".format(i, j) for i, j in summary.items()))
    print("###################################################################")
    return output_files

Вышеупомянутая функция преобразует файл PDF в серию файлов изображений. Она выполняет итерацию по выбранным страницам (по умолчанию все), делает снимок экрана текущей страницы и генерирует файл изображения с помощью метода writePNG().

Вы можете изменить zoom_x и zoom_y, чтобы изменить коэффициент масштабирования, не стесняйтесь настраивать эти параметры и вращать переменную в соответствии с вашими потребностями.

Воспользуемся этой функцией сейчас:

if __name__ == "__main__":
    import sys
    input_file = sys.argv[1]
    convert_pdf2img(input_file)

Давайте проверим скрипт на многостраничном PDF-файле (получите все здесь):

$ python convert_pdf2image.py Anketa_0.pdf

Вот результат

#### Отчет ########################################################
Исходный файл:Anketa_0.pdf
Страниц:None
Выходной файл(ы):['Anketa_0_page1.png', 'Anketa_0_page2.png', 'Anketa_0_page3.png']
###################################################################

И в самом деле, что за чёрт, изображения были успешно созданы:

Использованы материалы How to Convert PDF to Images in Python

Print Friendly, PDF & Email

CC BY-NC 4.0 Как с помощью Python преобразовать pdf‑файлы в картинки, опубликовано К ВВ, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.


Респект и уважуха

Добавить комментарий