Печать серийного номера/номера Бейтса во время печати

Печать серийного номера/номера Бейтса во время печати

Я хочу напечатать 50 копий одного и того же 16-страничного документа, но на каждой из них должен быть проштампован серийный номер. Я печатаю на многофункциональном принтере Ricoh/Lanier. Сейчас я печатаю и скрепляю lprс помощью строки типа:

lpr -P <printer> -# 50 -o StapleLocation=UpperLeft file.pdf

Поэтому я надеялся, что сочетание других вариантов позволит добиться этого.

Я исследовал и нашел различные варианты нанесения водяного знакатакой жеТекст на каждом документе, например "ЧЕРНОВИК" или "КОНФИДЕНЦИАЛЬНО". Но я бы хотел, чтобы на каждой копии был водяной знак или штамп с разным номером сверху.

Я могу написать программу с использованием PyPDF для создания нескольких файлов, каждый из которых будет начинаться с исходного файла и штамповать свой текст поверх него. Но печать 50 16-страничных файлов занимает гораздо больше времени, чем печать одного файла 50 раз. Любые советы приветствуются.

решение1

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

Оператор PostScript currentsystemparamsможет извлекать информацию из принтера, которая может включать PageCountцелое число, которое является: «Количество страниц, которые были успешно обработаны с момента изготовления». Это может использоваться как уникальный серийный номер, который код PostScript может добавлять к выводу страницы.

В качестве альтернативы код может «вносить постоянные изменения в объекты в VM» с помощью startjobоператора, которому нужен пароль администратора принтера. Небольшое непечатаемое задание может быть отправлено на принтер для инициализации глобального счетчика с помощью этой техники. Затем оно доступно для последующих заданий для извлечения, использования и обновления.

Однако оба эти метода, вероятно, не сработают при задании количества копий, поскольку PostScript будет выполнен только один раз для растеризации каждой страницы, а затем для каждой копии будут напечатаны идентичные страницы.

Цитаты взяты из старого справочника по языку PostScriptpdf.

решение2

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

Итак, что бы мы тут ни делали (интенсивное возня с фильтрами cups и PPD или генерация документов), вашему принтеру придется растрировать 800 страниц; тут уж ничего не поделаешь. Так что ваш подход с PyPDF мне кажется вполне приемлемым.

(Я использовал LaTeX с pdfpagesпакетом \includepdf, что-то вроде

\newcounter{serialnr}{10000}%
\includepdf[pagecommand={\thispagestyle{empty}\arabic{serialnr}]{pdffile.pdf}%
\stepcounter{serialnr}%
\includepdf[pagecommand={\thispagestyle{empty}\arabic{serialnr}]{pdffile.pdf}%

( \pgfforделает это проще)

решение3

Если вы согласны напечатать серийный номер только на титульном листе,

  1. Разделите ваш документ на p01.pdfи p02-16.pdf.
  2. Распечатайте 50 экземпляров  p02-16.pdf.
  3. Напишите программу, которая создаст 50 вариантов с p01.pdf разными серийными номерами и выведет их на печать.
  4. Перемешивать вручную.

Если ручное перемешивание занимает слишком много времени, можно написать циклический скрипт:

do 50 times:
begin
        make a copy of p01.pdf with a unique serial number, and print it
        print p02-16.pdf
end

Это может оказаться не быстрее, чем решение «распечатать 50 файлов по 16 страниц».

Конечно, если вы печатаете с двух сторон, вам придется разделить документ на p01-02.pdfи p03-16.pdf.

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