Как стать автором
Обновить

Как сканировать документы А3 формата, если под рукой только сканер А4 формата

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.6K

Оцифровка чертежей и документов формата А3 не представляет сложности, если у вас есть сканер соответствующего размера. Однако что делать, если под рукой лишь стандартное МФУ формата А4?

Формат А3 в два раза больше А4: это два стандартных листа, соединенных по длинной стороне. В результате, чтобы оцифровать А3, приходится сканировать его по частям - левую и правую половинки, а затем как-то их объединять.

Ручная склейка занимает много времени, особенно если документов много. А если тратить время на ручную склейку не хочется? Автоматизация такого процесса избавляет от рутинной работы. Актуально для чертежей и схем.

Что понадобится для выполнения задачи

Для автоматизации склейки PDF-файлов потребуется всего несколько инструментов.

Первым делом понадобится Python — это простой в использовании язык программирования, идеально подходящий для подобных задач.

Для работы с PDF-файлами нам понадобится библиотека PyPDF2. Она позволяет извлекать страницы из PDF, объединять их, изменять порядок и выполнять другие операции.

Источник красивой картинки: dev.to
Источник красивой картинки: dev.to

Чтобы склеить изображения из двух половинок, потребуется библиотека Pillow. С её помощью можно выполнять базовую обработку изображений: изменять размеры, соединять их и сохранять в нужном формате. Эта библиотека будет полезна, если ваши сканы нужно предварительно подогнать по размерам или качеству.

Установка Python

Если Python ещё не установлен на вашем компьютере, скачайте его с официального сайта. Выберите последнюю стабильную версию для вашей операционной системы и установите её, следуя инструкциям. Во время установки не забудьте отметить пункт "Добавить Python в PATH", чтобы команды работали из терминала.

Установка библиотек

После установки Python, нужно добавить необходимые библиотеки. Сделать это просто: откройте терминал (или командную строку) и выполните следующие команды:

pip install PyPDF2 Pillow  

Эти команды загрузят и установят всё необходимое. Теперь вы полностью готовы к написанию и запуску скрипта для автоматической склейки ваших PDF-документов.

Подготовка исходного файла

Перед началом автоматической склейки важно правильно подготовить исходный PDF-файл. Он должен содержать сканы двух половинок листа формата А4 каждая, расположенные в виде отдельных страниц. Это нужно для того, чтобы программа смогла корректно объединить их в одну страницу.

Важно, чтобы страницы PDF-файла следовали в правильном порядке:

  1. Первая страница — это левая половина листа А3.

  2. Вторая страница — правая половина.

Каждый лист А3 будет представлен двумя страницами. Если в вашем документе несколько листов, их половинки должны чередоваться так же: сначала левая часть первого листа, потом правая, затем левая часть второго листа, и так далее.

Эта структура поможет программе автоматически склеить половинки в правильном порядке.

Как работает процесс склейки

Автоматизация склейки документов А3 формата включает извлечение страниц, обработку изображений и преобразование в PDF. Вот как это работает:

  1. Извлечение страниц из PDF

Каждая страница PDF, представляющая половину листа А3, сначала извлекается. Этот процесс позволяет получить изображения страниц, которые затем можно обработать.

  1. Преобразование страниц в изображения

С помощью библиотеки Pillow страницы преобразуются в изображения. Это необходимо для удобной манипуляции — например, склеивания или вращения.

  1. Объединение изображений

Изображения, соответствующие левой и правой половинам листа, склеиваются по горизонтали. Этот этап объединяет две части в единый файл, точно воспроизводящий лист А3.

  1. Конвертация обратно в PDF

Склеенные изображения снова преобразуются в PDF с помощью PyPDF2. Это позволяет сохранить формат документа и сделать его удобным для дальнейшего использования.

Сам скрипт

Вот и сам скрипт: он автоматически склеивает половинки страниц формата A4 в один файл формата A3. Может использоваться на Windows, macOS и Linux:

# pip install PyPDF2 pillow

# Подробное описание: https://habr.com/ru/articles/875846/

import sys
sys.stdout.reconfigure(encoding='utf-8')

import os
from PyPDF2 import PdfReader, PdfWriter
from PIL import Image

# Выводим общую информацию о начале обработки PDF
print("[INFO] Начало обработки PDF...\n")

# Имя входного PDF-файла
input_pdf_file = "input.pdf"
# Имя выходного PDF-файла
output_pdf_file = "output.pdf"

# Углы поворота для левой и правой частей (в градусах)
# Укажите поворот для каждой части, например, 0, 90, 180 или 270
left_rotation = 0
right_rotation = 180

# Создадим временную папку для сохранения изображений
output_images_dir = "temp_images"
os.makedirs(output_images_dir, exist_ok=True)

# Считываем PDF и выгружаем каждую страницу как отдельное изображение
reader = PdfReader(input_pdf_file)
page_images = []

print(f"[INFO] Извлечение изображений из {input_pdf_file}...")
for page_number, page in enumerate(reader.pages):
    # Получаем раскодированные данные изображений
    x_object = page.get("/Resources").get("/XObject").get_object()
    for obj in x_object:
        if x_object[obj].get("/Subtype") == "/Image":
            data = x_object[obj].get_data()
            image_path = os.path.join(output_images_dir, f"page_{page_number + 1}.png")
            with open(image_path, "wb") as image_file:
                image_file.write(data)
            page_images.append(image_path)
            print(f"[INFO] Изображение страницы {page_number + 1} сохранено: {image_path}")

# Обрабатываем и склеиваем по две страницы
print("[INFO] Склеивание изображений в формат A3...")
glued_images = []
for i in range(0, len(page_images), 2):
    left_image_path = page_images[i]
    right_image_path = page_images[i + 1] if i + 1 < len(page_images) else None

    # Загружаем изображения
    left_image = Image.open(left_image_path)
    left_image = left_image.rotate(left_rotation, expand=True)  # Применяем поворот левой части

    if right_image_path:
        right_image = Image.open(right_image_path)
        right_image = right_image.rotate(right_rotation, expand=True)  # Применяем поворот правой части

        # Создаем новое изображение для A3 склеенного
        total_width = left_image.width + right_image.width
        max_height = max(left_image.height, right_image.height)
        new_image = Image.new("RGB", (total_width, max_height))

        # Вставляем левую и правую части
        new_image.paste(left_image, (0, 0))
        new_image.paste(right_image, (left_image.width, 0))
        glued_image_path = os.path.join(output_images_dir, f"glued_page_{i // 2 + 1}.png")
        new_image.save(glued_image_path)
        glued_images.append(glued_image_path)
        print(f"[INFO] Готово: склеенное изображение {glued_image_path}")

# Конвертируем склеенные страницы обратно в PDF
print("[INFO] Конвертация склеенных изображений обратно в PDF...")
writer = PdfWriter()
for glued_image_path in glued_images:
    image = Image.open(glued_image_path)
    pdf_page_path = glued_image_path.replace(".png", ".pdf")
    image.save(pdf_page_path, "PDF", resolution=300.0)
    with open(pdf_page_path, "rb") as pdf_page_file:
        writer.add_page(PdfReader(pdf_page_file).pages[0])

# Сохраняем итоговый PDF
with open(output_pdf_file, "wb") as output_pdf:
    writer.write(output_pdf)

print(f"[INFO] Обработка завершена. Итоговый PDF сохранен как {output_pdf_file}")

Результат:

Заключение

После завершения обработки откройте итоговый PDF и убедитесь, что страницы формата А3 выглядят ровно и соединены.

Скрипт можно доработать для решения более сложных задач. Например:

  • Склейка нестандартных форматов.

  • Использование компьютерного зрения для того, чтобы исключить небольшие повороты каждого из листов.

Автоматизация процесса оцифровки больших форматов избавляет от рутины и экономит время, особенно при работе с чертежами, планами и схемами.

Не забывайте сохранять резервные копии исходных файлов — это защитит вас от потери данных.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

24 февраля 2025 г.

Теги:
Хабы:
Всего голосов 8: ↑6 и ↓2+7
Комментарии9

Публикации

Работа

Data Scientist
42 вакансии

Ближайшие события