
Ich möchte 50 Kopien desselben 16-seitigen Dokuments drucken, aber auf jede Kopie eine Seriennummer aufdrucken. Ich drucke auf einem Multifunktionsdrucker von Ricoh/Lanier. Im Moment drucke und hefte ich lpr
mit einer Zeile wie dieser durch:
lpr -P <printer> -# 50 -o StapleLocation=UpperLeft file.pdf
Daher hoffte ich, dass dies durch eine Kombination anderer Optionen erreicht werden könnte.
Ich habe recherchiert und verschiedene Möglichkeiten gefunden, dasDasselbeText auf jedem Dokument, wie „ENTWURF“ oder „VERTRAULICH“. Aber ich möchte, dass jede Kopie oben eine andere Nummer als Wasserzeichen oder Stempel hat.
Ich kann mit PyPDF ein Programm schreiben, um mehrere Dateien zu erstellen, die jeweils von einer Quelldatei ausgehen und benutzerdefinierten Text darüber stempeln. Aber das Drucken von 50 16-seitigen Dateien dauert viel länger als das 50-malige Drucken einer Datei. Jeder Rat ist willkommen.
Antwort1
Im Idealfall sollten Sie in der Lage sein, zu diesem Zweck ein kleines Stück PostScript zu schreiben, das vom Interpreter im Drucker ausgeführt wird, da in der Sprache alle Konzepte vorhanden sind, die dies ermöglichen.
Der PostScript-Operator currentsystemparams
kann Informationen vom Drucker abrufen, darunter PageCount
, eine Ganzzahl, die „die Anzahl der Seiten angibt, die seit der Herstellung erfolgreich verarbeitet wurden“. Dies könnte als eindeutige Seriennummer verwendet werden, die der PostScript-Code der Seitenausgabe hinzufügen könnte.
Alternativ kann der Code „dauerhafte Änderungen an Objekten in der VM vornehmen“, indem er den startjob
Operator verwendet, der das Administratorkennwort des Druckers benötigt. Mit dieser Technik kann ein kleiner, nicht druckbarer Auftrag an den Drucker gesendet werden, um einen globalen Zähler zu initialisieren. Dieser ist dann für spätere Aufträge zugänglich, um ihn abzurufen, zu verwenden und zu aktualisieren.
Allerdings funktionieren diese beiden Techniken wahrscheinlich nicht, wenn eine bestimmte Anzahl von Kopien festgelegt wird, da das PostScript nur einmal ausgeführt wird, um jede Seite zu rastern, und dann für jede Kopie identische Seiten gedruckt werden.
Zitate stammen aus einer alten PostScript-Sprachreferenzpdf.
Antwort2
Einige Drucker verfügen über Optionen zum Drucken von Wasserzeichen, die Sie als Treiberoption aktivieren können, ohne ein neues Dokument erstellen zu müssen (d. h., der Rasterizer im Drucker fügt das zusätzliche Wasserzeichen lediglich oben auf der Seite hinzu), aber das scheint hier nicht das zu sein, was Sie möchten.
Egal, was wir hier tun (intensives Herumspielen mit CUPS-Filtern und PPDs oder Dokumentgenerierung), Ihr Drucker muss 800 Seiten rastern; das lässt sich nicht wirklich ändern. Daher klingt Ihr PyPDF-Ansatz für mich gut.
(Ich habe LaTeX mit dem pdfpages
des Pakets verwendet \includepdf
, so etwas wie
\newcounter{serialnr}{10000}%
\includepdf[pagecommand={\thispagestyle{empty}\arabic{serialnr}]{pdffile.pdf}%
\stepcounter{serialnr}%
\includepdf[pagecommand={\thispagestyle{empty}\arabic{serialnr}]{pdffile.pdf}%
( \pgffor
macht dies einfacher)
Antwort3
Wenn Sie damit zufrieden sind, die Seriennummer nur auf der Titelseite abzudrucken,
- Teilen Sie Ihr Dokument in
p01.pdf
und aufp02-16.pdf
. - Drucken Sie 50 Kopien von
p02-16.pdf
. - Schreiben Sie ein Programm, um 50 Varianten
p01.pdf
mit unterschiedlichen Seriennummern zu erstellen und auszudrucken. - Manuell mischen.
Wenn das manuelle Mischen zu zeitaufwändig ist, besteht eine Variante darin, ein Schleifenskript zu schreiben:
do 50 times:
begin
make a copy of p01.pdf with a unique serial number, and print it
print p02-16.pdf
end
Das ist möglicherweise nicht schneller als Ihre Lösung zum „Drucken von 50 16-seitigen Dateien“.
Wenn Sie beidseitig drucken, müssen Sie Ihr Dokument natürlich in p01-02.pdf
und aufteilen p03-16.pdf
.