Ещё одно вечернее развлечение посвящаю разработке легкого инструмента командной строки для преобразования файлов 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.
Респект и уважуха