![是否可以使用 psutils、pstops 和 CUPS 将 A5 页面打印到 A4 纸上制作成 A5 小册子?](https://linux22.com/image/1285170/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20psutils%E3%80%81pstops%20%E5%92%8C%20CUPS%20%E5%B0%86%20A5%20%E9%A1%B5%E9%9D%A2%E6%89%93%E5%8D%B0%E5%88%B0%20A4%20%E7%BA%B8%E4%B8%8A%E5%88%B6%E4%BD%9C%E6%88%90%20A5%20%E5%B0%8F%E5%86%8C%E5%AD%90%EF%BC%9F.png)
我想创建一个 CUPS 打印机队列,它接受 A5 页的书籍,并在打印之前自动将它们排列成 A4 纸上的小册子。本质上,这是使用以下管道完美完成的:
psbook -s4 | psnup -Pa5 -pa4 -2
我已经创建了一个使用此管道的 CUPS 队列,并且一切都运行正常,页面的排列和打印都完全按照我想要的方式进行,只是我的打印机的输出psnup
有些混乱,而且双面打印选项被忽略了(可能Debian 错误 168954)我在网上发现有说法称psutils 坏了它提供了一种解决方法,但由于我不明白如何使用该解决方法,因此我尝试使用其他工具(目前)复制该psbook
行为。psnup
pstops
mpage
问题是,网上所有关于制作小册子的说明都假设我有 A4 页面,我想将其缩小到 A5 页面并制作成小册子,但不幸的是,我并没有做这么疯狂的事情。我想要更简单的东西——拿出 A5 页面并将它们排列在 A4 页面上。问题是如何做?
我想出了以下页面规范,可以pstops
缩小 A4 页面的尺寸:
4:[email protected](21cm,0)[email protected](21cm,14.85cm),[email protected](21cm,0)[email protected](21cm,14.85cm)
如果我事先将 A5 页面放大到 A4,它就可以正常工作。不幸的是,一切都有点偏离(比例、边框),我无法修改页面规范以正确定位 A5 页面。
我尝试将 A5 页面放在 A4 页面的中间并使用比例@1
,但是当我调整偏移量时,我的文本仍然会被裁剪。
而且mpage
似乎仅为缩放而设计,我找不到任何方法强制它不缩放。
PS 我检查了生成的 PostScript 文件在到达打印机之前是否包含所有双面设置,尽管 CUPS 将其中一些设置添加了两次(因为打印要经过两个队列)
答案1
从按顺序排列页面的 A5 PDF 文件开始。将以下内容转换为管道脚本:
pdftops FILE.pdf FILE.ps
psbook -q FILE.ps FILE_BOOK.ps
psnup -q -la4 -pa4 -Pa5 -2 FILE_BOOK.ps FILE_SIG.ps
ps2pdf FILE_SIG.ps
这应该会给你一个 FILE_SIG.pdf。
笔记:FILE_SIG.ps 看起来不对,但打印正确。将其更改为 PDF 可节省空间并正确显示。
现在您要做的就是让您的打印机连续打印出这些纸张而不会搞砸。
答案2
现在是 2022 年,平台是 Mac OS X Ventura,出于某种原因,我不得不添加更多内容| ps2ps
来强制纸张大小。我根本无法psnup
完成它的工作。这是我在 GNU make 中完成的解决方案:
.PHONY: all
all: document-a4-booklet.pdf
# Handy trick if your source document has spaces in its name:
document-a5.pdf:
cp "$$HOME/Downloads/a file name with spaces.pdf" $@
document-a5.ps: document-a5.pdf
pdf2ps -dLanguageLevel=3 $< $@
document-a5-booklet.ps: document-a5.ps
psbook $< | ps2ps -sPAPERSIZE=a5 - - > $@
# These variables are set apart for easy tweaking, in case
# you have to:
SCALE=1.0
OFFSETY_CM=21
OFFSETX1_CM=0
OFFSETX2_CM=14.85
document-a4-booklet.ps: document-a5-booklet.ps
pstops -w29.7cm -h21cm '2:0L@$(SCALE)($(OFFSETY_CM)cm,$(OFFSETX1_CM)cm)+1L@$(SCALE)($(OFFSETY_CM)cm,$(OFFSETX2_CM)cm)' $< \
| ps2ps -sPAPERSIZE=a4 - - > $@
%.pdf: %.ps
ps2pdf -dAutoRotatePages=/None $< $@
.PHONY: clean
clean:
rm -f document*.pdf document*.ps