
Quero imprimir 50 cópias do mesmo documento de 16 páginas, mas tenho um número de série carimbado em cada uma. Estou imprimindo em uma impressora multifuncional Ricoh/Lanier. No momento, imprimo e grampeio lpr
com uma linha como:
lpr -P <printer> -# 50 -o StapleLocation=UpperLeft file.pdf
Então, eu esperava que uma combinação de outras opções pudesse conseguir isso.
Pesquisei e encontrei várias opções para colocar marca d'água nomesmotexto em cada documento, como "RASCUNHO" ou "CONFIDENCIAL". Mas gostaria que cada cópia tivesse um número diferente com marca d'água ou carimbado na parte superior.
Posso escrever um programa usando PyPDF para criar vários arquivos, cada um começando a partir de um arquivo de origem e carimbando um texto personalizado sobre ele. Mas imprimir 50 arquivos de 16 páginas leva muito mais tempo do que imprimir um arquivo 50 vezes. Qualquer conselho é apreciado.
Responder1
Em um mundo ideal, você deveria ser capaz de escrever um pouquinho de PostScript que é executado pelo intérprete na impressora para fazer isso, já que todos os conceitos existem na linguagem para permitir isso.
O operador PostScript currentsystemparams
pode recuperar informações da impressora que podem incluir PageCount
, um número inteiro que é: "O número de páginas que foram processadas com êxito desde a fabricação". Isso poderia ser usado como um número de série exclusivo, que o código PostScript poderia adicionar à saída da página.
Alternativamente, o código pode “fazer alterações persistentes em objetos na VM” usando o startjob
operador, que precisa da senha do administrador da impressora. Um pequeno trabalho não imprimível pode ser enviado à impressora para inicializar um contador global com esta técnica. Isso fica então acessível para trabalhos posteriores recuperarem, usarem e atualizarem.
Ambas as técnicas provavelmente não funcionarão ao definir um número de cópias, pois o PostScript será executado apenas uma vez para rasterizar cada página e, em seguida, páginas idênticas serão impressas para cada cópia.
As citações são de uma referência antiga da linguagem PostScriptpdf.
Responder2
Algumas impressoras possuem opções de impressão de marca d'água, que você pode ativar como uma opção de driver sem ter que gerar um novo documento (ou seja, o rasterizador na impressora apenas adiciona a marca d'água adicional no topo da página), mas isso não parece o que você quero aqui.
Portanto, não importa o que façamos aqui (hackeamento intenso com filtros cups e PPDs ou geração de documentos), sua impressora terá que rasterizar 800 páginas; realmente não pode ser ajudado. Portanto, sua abordagem PyPDF parece boa para mim.
(Eu usei LaTeX com o pdfpages
pacote \includepdf
, algo como
\newcounter{serialnr}{10000}%
\includepdf[pagecommand={\thispagestyle{empty}\arabic{serialnr}]{pdffile.pdf}%
\stepcounter{serialnr}%
\includepdf[pagecommand={\thispagestyle{empty}\arabic{serialnr}]{pdffile.pdf}%
( \pgffor
torna isso mais fácil)
Responder3
Se você quiser imprimir o número de série apenas na página de título,
- Divida seu documento em
p01.pdf
ep02-16.pdf
. - Imprima 50 cópias de
p02-16.pdf
. - Escreva um programa para fazer 50 variantes
p01.pdf
com diferentes números de série e imprima-as. - Embaralhar manualmente.
Se o embaralhamento manual consumir muito tempo, uma variação é escrever um script em loop:
do 50 times:
begin
make a copy of p01.pdf with a unique serial number, and print it
print p02-16.pdf
end
Isso pode não ser mais rápido do que a sua solução de “imprimir 50 arquivos de 16 páginas”.
Obviamente, se estiver imprimindo frente e verso, você precisará dividir o documento em p01-02.pdf
e p03-16.pdf
.