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

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

У меня есть большой PDF-файл, содержащий сотни страниц. Каждыйнстраница содержит те же самые конкретные слова и то же самое изображение. Я назову их"специальные страницы".

Положение этихспециальные страницынепредсказуемо. Это означает, что мой PDF может иметь, например, 5 обычных страниц, тогда страница 6 являетсяспециальная страницазатем 2 обычные страницы, затем сноваспециальная страница, затем 12 нормальных, затем 2специальные страницыи т.д. и т.п.

Мне нужен способ автоматизировать печать этих PDF-файлов, чтобы все обычные страницы печатались на лотке для бумаги 1 моего принтера, и всеспециальные страницына лоток для бумаги 2 (потому что мне нужна определенная бумага для обычной печати и другая дляспециальные страницы).

Кто-нибудь знает, есть ли способ распечатать весь PDF-файл сразу и направить егоспециальные страницыв определенный лоток принтера на основе

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

Мне нужно будет делать это регулярно (раз в месяц).

Я открыт для любых предложений. Конкретное ПО, Powershell или другие языки программирования. Есть идеи?

Лучше всего подойдут решения с открытым исходным кодом. Windows, Mac или Linux — все это приемлемые варианты для меня.

Пока что я нашел одно решение, а именно:Ricoh Печать и Поделитьсяно одна лицензия с 5-летней поддержкой стоит около 2500 долларов США. Было бы неплохо найти более дешевое или открытое решение.

решение1

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

Инструмент может работать на компьютерах с ОС Windows или Linux.

В ответ на комментарий @MrUpsidown к моему предложению я привожу здесь пример скрипта оболочки, который берет входной файл и временно разделяет его только для оценки размера в байтах каждой страницы. Разделенные страницы затем используются для создания списков страниц "специальных страниц", которые являются большими, и "обычных страниц", которые являются маленькими, а затем для создания команд cups lpr для отправки этих страниц на принтер. Скрипт можно изменить для проверки каждой страницы на наличие текстовой строки (например, с помощью pdftotext) или какого-либо другого уникального атрибута. В любом случае, один список отправляется в верхний лоток, а другой - в нижний лоток. Затем он убирает за собой. Скрипт нужно будет настроить, чтобы удовлетворить ваши потребности, и сделать его более прочным для использования в производстве, но я думаю, что он должен описать базовый метод, который я предлагал.

После установки qpdf на Linux-машину (или Mac) Вы запускаете скрипт, создавая файл (назовем его "splitpages"), затем делаете его исполняемым через chmod 755, затем выполняете скрипт, вызывая splitpages filename.pdf. В настоящее время он просто выводит команды, которые можно активировать, заменив "echo" на "eval" в скрипте. Примером выполнения скрипта, подобного этому, splitpages samplefile.pdf где samplefile.pdf имеет 4 страницы (3 обычных и четвертая специальная), будет вывод следующих строк

lpr -o media=Upper -o page-ranges=1,2,3, samplefile.pdf
lpr -o media=Lower -o page-ranges=4, samplefile.pdf

Конечно, другие вещи нужно подстроить под ваши нужды.

#!/bin/bash
# print pages based on page size 
# greater than minimumsize goes to tray1
# else goes to tray2
minimumsize=500000
infile=$1
if [ ! -f "$infile" ]; then
    echo "no input file"
    exit
fi

# location of temporary files used to identify page characteristics
outfile=/tmp/test
rm -f ${outfile}*

# split the file so we can assess lengths
qpdf $infile --split-pages $outfile

pnum=0
bigpage=
smallpage=
for page in ${outfile}*
do
    ((pnum++))
    actualsize=$(wc -c <"$page")
    if [ $actualsize -ge $minimumsize ]; then
    #echo size is over $minimumsize bytes
    bigpage="${bigpage}${pnum},"
    else
    #echo size is under $minimumsize bytes
    smallpage="${smallpage}${pnum},"
    fi
done

# replace the echo command with the eval command to actually execute the strings
lprc1="lpr -o media=Upper -o page-ranges=$bigpage $infile"
echo $lprc1
lprc2="lpr -o media=Lower -o page-ranges=$smallpage $infile"
echo $lprc2
rm -f ${outfile}*

решение2

Adobe Acrobat Pro вместе с Плагин AutoSplit Pro ($149) может это сделать. Более подробную информацию можно найти в статье Извлечение страниц из PDF-документа с помощью текстового поиска.

введите описание изображения здесь

Вы также можете автоматизировать этот процесс самостоятельно, используя JavaScript уровня документа, установленный в одной из папок JavaScript Acrobat, и создав действие, которое выполняет JavaScript.

Для примера см. статью Извлечение страниц PDF на основе содержимого.

Связанный контент