我想打印 50 份相同的 16 页文档,但每份上都印有序列号。我正在使用 Ricoh/Lanier 多功能打印机进行打印。现在我打印并装订lpr
如下一行:
lpr -P <printer> -# 50 -o StapleLocation=UpperLeft file.pdf
所以我希望结合其他选项可以实现这一目标。
我研究并发现了各种加水印的选项相同的每个文档上的文本,例如“草稿”或“机密”。但我希望每个副本的顶部都有不同的数字水印或印章。
我可以使用 PyPDF 编写一个程序来创建多个文件,每个文件都从源文件开始,并在其上标记自定义文本。但打印 50 个 16 页的文件比打印一个文件 50 次所需的时间要长得多。任何建议表示赞赏。
答案1
在理想的情况下,您应该能够编写一小段由打印机中的解释器执行的 PostScript 来执行此操作,因为该语言中存在实现此目的的所有概念。
PostScript 操作员currentsystemparams
可以从打印机检索信息,其中可以包括PageCount
,一个整数,即:“自制造以来已成功处理的页数”。它可以用作唯一的序列号,PostScript 代码可以将其添加到页面输出中。
或者,代码可以通过使用startjob
操作员“对虚拟机中的对象进行持久更改”,这需要打印机管理员密码。可以将小型非打印作业发送到打印机,以使用此技术初始化全局计数器。然后,稍后的作业就可以访问该信息以进行检索、使用和更新。
不过,当设置多个副本时,这两种技术可能都不起作用,因为 PostScript 将只执行一次以光栅化每个页面,然后将为每个副本打印相同的页面。
引用来自旧的 PostScript 语言参考pdf。
答案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
如果您愿意只在扉页上打印序列号,
- 将您的文档拆分为
p01.pdf
和p02-16.pdf
。 - 打印 50 份
p02-16.pdf
。 - 编写一个程序来制作 50 种具有
p01.pdf
不同序列号的变体,并打印它们。 - 手动洗牌。
如果手动洗牌太耗时,一种变体是编写循环脚本:
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
。