Месяца два назад я написал статью о том, как сканировать двусторонние многостраничные документы, когда под рукой только обычный сканер с автоподачей, в которой затронул проблему того, что на МФУ часто двусторонняя двусторонняя печать, но сканировать только с одной стороны.

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

Конечно, можно вручную удалить несколько страниц из PDF, но что делать, если таких файлов сотни, а сами документы содержат десятки, а то и сотни страниц, как на фото?

Большой многостраничный документ

тл; ДР

Обходной путь: используйте скрипт bash и консольную программу PDFtk:

#!/bin/bash
# Убирает пустые страницы из PDF после двухстороннего сканирования
# Описание в статье 
datetime=$(date +"%Y-%m-%d_%H-%M-%S")
# Создаём единый лог файл для всех действий
log_file="blank_page_remover_$datetime.log"
touch $log_file
# Перебираем все PDF файлы в текущем каталоге
for file in *.pdf; do
  echo "Работаем с $file..." >> "$log_file"
  # Разделяем PDF файл на отдельные страницы
  echo "Разделяем $file на отдельные страницы..." >> "$log_file"
  pdftk "$file" burst output "${file%.*}_pg_%04d.pdf" >> "$log_file" 2>&1
  # Удаляем файлы страниц, размер которых меньше чем XX килобайт
  echo "Удаляем файлы страниц, размер которых меньше чем 70 килобайт..." >> "$log_file"
  for page in "${file%.*}"_pg_*.pdf; do
    size=$(wc -c < "$page")
    if [[ $size -lt 70000 ]]; then
      echo "Удаляем $page (размер: $size байт)..." >> "$log_file"
      rm "$page"
    fi
  done
  # Склеиваем оставшиеся страницы в новый файл
  echo "Склеиваем оставшиеся страницы в новый файл..." >> "$log_file"
  pdftk "${file%.*}"_pg_*.pdf cat output "${file%.*}_без пустых.pdf" compress >> "$log_file" 2>&1
  # Удаляем временные файлы
  echo -e "Удаляем временные файлы...\n" >> "$log_file"
  rm "${file%.*}"_pg_*.pdf
done

Возможность удаления пустых страниц из pdf с помощью локальной программы

Прежде чем приступить к написанию своего скрипта, я честно пытался разобраться, как удалить пустые страницы из PDF стандартными средствами в некоторых программах:

  1. Я пытался сделать это с бесплатным открытым исходным кодом PDFsam Базовыйкоторый есть и на Linux и на Windows, и на MacOS, так как я нашел инструкции в интернете, но они оказались устаревшими.

  2. Я пытался сделать это с помощью Adobe Acrobat Pro, но у меня это не сработало. Сделал по инструкции:

    1. Откройте файл PDF в Adobe Acrobat.

    2. Нажмите на вкладку «Инструменты» в верхней строке меню.

    3. Выберите «Страницы» из списка инструментов справа.

    4. Нажмите «Обрезать» в меню инструментов «Страницы».

    5. В диалоговом окне «Обрезка страницы» выберите параметры «Удалить белые поля» и «Удалить белые поля для всех страниц».

    6. Нажмите «ОК», чтобы применить изменения.

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

ЧИТАТЬ   KGallery посвятит музыкальному самиздату выставку, в которую войдут демо «Кино» на слова Виктора Цоя и другие артефакты.
 Adobe Acrobat Pro и удаление пустых страниц

Adobe Acrobat Pro и удаление пустых страниц

  1. Я пытался сделать это с помощью редактора PDF-XChange, но у меня это тоже не сработало. У меня были инструкции:

    1. Загрузите файл PDF: выберите «Файл» > «Открыть» или нажмите Ctrl + O на клавиатуре, затем найдите и выберите файл PDF, из которого вы хотите удалить пустые страницы.

    2. После загрузки файла PDF щелкните вкладку «Упорядочить» на верхней панели инструментов.

    3. Выделив все страницы, нажмите кнопку «Удалить пустые страницы».

      Прогресс продолжился, но остались пустые страницы для одного из трех вариантов.

Редактор PDF-XChange

Редактор PDF-XChange

Использование локальной программы, конечно, было бы лучшим вариантом, так как это гарантировало бы, что файлы PDF останутся на компьютере, обеспечивая конфиденциальность и безопасность по сравнению с использованием онлайн-инструментов.

Возможность удалить пустые страницы из pdf с помощью онлайн-инструментов

Но так как с локальными инструментами у меня не получилось, решил попробовать онлайн-сервисы.

Мне удалось найти в Интернете несколько инструментов, которые могут помочь вам автоматически удалять пустые страницы из PDF-файла:

  1. Сейда (https://www.sejda.com/delete-pdf-страницы)

  2. маленький pdf (https://smallpdf.com/delete-pages-from-pdf)

  3. Ловкий PDF (https://deftpdf.com/delete-pdf-страницы)

Ни в одном из них я не нашел опции автоматического распознавания пустых страниц, хотя поисковик встречал ссылки на несуществующие в данный момент страницы (pdf удалить пустые страницы) с этих сервисов.

И, конечно же, использование онлайн-инструментов может поставить под угрозу конфиденциальность и безопасность ваших документов.

Возможность удаления пустых страниц из pdf с помощью локального скрипта bash и консольной программы PDFtk

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

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

ЧИТАТЬ   Суд наложил на «Яндекс» штраф в размере 2 млн рублей

Я решил, что будет следующий алгоритм:

  1. Разделите документ PDF на отдельные файлы.

  2. Страницы меньше определенного размера удаляются.

  3. Приклеиваю оставшиеся страницы.

  4. Повторяю столько раз, сколько файлов PDF в текущей папке.

  5. ВЫГОДА

После нехитрых манипуляций файл получился blank_page_remover.sh:

#!/bin/bash
# Убирает пустые страницы из PDF после двухстороннего сканирования
# Описание в статье 
datetime=$(date +"%Y-%m-%d_%H-%M-%S")
# Создаём единый лог файл для всех действий
log_file="blank_page_remover_$datetime.log"
touch $log_file
# Перебираем все PDF файлы в текущем каталоге
for file in *.pdf; do
  echo "Работаем с $file..." >> "$log_file"
  # Разделяем PDF файл на отдельные страницы
  echo "Разделяем $file на отдельные страницы..." >> "$log_file"
  pdftk "$file" burst output "${file%.*}_pg_%04d.pdf" >> "$log_file" 2>&1
  # Удаляем файлы страниц, размер которых меньше чем XX килобайт
  echo "Удаляем файлы страниц, размер которых меньше чем 70 килобайт..." >> "$log_file"
  for page in "${file%.*}"_pg_*.pdf; do
    size=$(wc -c < "$page")
    if [[ $size -lt 70000 ]]; then
      echo "Удаляем $page (размер: $size байт)..." >> "$log_file"
      rm "$page"
    fi
  done
  # Склеиваем оставшиеся страницы в новый файл
  echo "Склеиваем оставшиеся страницы в новый файл..." >> "$log_file"
  pdftk "${file%.*}"_pg_*.pdf cat output "${file%.*}_без пустых.pdf" compress >> "$log_file" 2>&1
  # Удаляем временные файлы
  echo -e "Удаляем временные файлы...\n" >> "$log_file"
  rm "${file%.*}"_pg_*.pdf
done

Для запуска скрипта вам понадобится PDFtk (сокращение от PDF Toolkit), который представляет собой инструмент командной строки для работы с PDF-файлами. Как установить его для разных операционных систем вы найдете в предыдущей статье.

Как использовать скрипт для удаления пустых страниц из документа PDF

Чтобы запустить сценарий bash на компьютере, выполните следующие действия в зависимости от вашей операционной системы:

Для Linux и macOS:

  1. Открыть терминал: нажмите Ctrl + Alt + T под линуксом или открыть Терминал из папки Приложения > Утилиты на макОС.

  2. Перейдите в каталог, где находится скрипт: используйте команду cdза которым следует путь к каталогу. Например:
    cd /путь/к/скрипту

  3. Сделайте скрипт исполняемым:
    chmod +x blank_page_remover.sh

  4. Запустите этот скрипт. Запустите скрипт, набрав ./затем имя скрипта:
    ./blank_page_remover.sh

  5. ВЫГОДА!
    Скрипт создаст новые файлы PDF без пустых страниц и подробный журнал действий.

ЧИТАТЬ   На Камчатке перевернулась лодка с десятью рыбаками
Терминал в Ubuntu и результат запуска скрипта Blank_page_remover.sh

Терминал в Ubuntu и результат запуска скрипта blank_page_remover.sh

Для Windows (с GitBash или WSL):

  1. Установите GitBash или WSL: если вы еще этого не сделали, установите GitBashGenericName Или Подсистема Windows для Linux (WSL).

  2. Откройте Git Bash или WSL: щелкните правой кнопкой мыши папку, содержащую скрипт, и выберите GitBash здесь Или Открыть в WSL.

  3. Сделайте скрипт исполняемым:
    chmod +x blank_page_remover.sh

  4. Запустите этот скрипт. Запустите скрипт, набрав ./затем имя скрипта:
    ./blank_page_remover.sh

  5. ВЫГОДА!
    Скрипт создаст новые файлы PDF без пустых страниц и подробный журнал действий.

Заключение

Удаление пустых страниц из PDF-файлов после двустороннего сканирования может оказаться непростой задачей, особенно при работе с большими объемами документов. Однако эта статья предоставила вам решение в виде использования автоматического локального сценария bash с консольной программой PDFtk.

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

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

Автор: Михаил Шардин,

10 мая 2023 г.

Source

От admin