Ещё одно вечернее развлечение посвящаю разработке легкого инструмента командной строки для преобразования файлов PDF в картинки.
Будем использовать , универсальное настраиваемое решение для интерпретатора 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'] ###################################################################
И в самом деле, что за чёрт, изображения были успешно созданы:

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

