是否可以使用 psutils、pstops 和 CUPS 将 A5 页面打印到 A4 纸上制作成 A5 小册子?

是否可以使用 psutils、pstops 和 CUPS 将 A5 页面打印到 A4 纸上制作成 A5 小册子?

我想创建一个 CUPS 打印机队列,它接受 A5 页的书籍,并在打印之前自动将它们排列成 A4 纸上的小册子。本质上,这是使用以下管道完美完成的:

psbook -s4 | psnup -Pa5 -pa4 -2

我已经创建了一个使用此管道的 CUPS 队列,并且一切都运行正常,页面的排列和打印都完全按照我想要的方式进行,只是我的打印机的输出psnup有些混乱,而且双面打印选项被忽略了(可能Debian 错误 168954)我在网上发现有说法称psutils 坏了它提供了一种解决方法,但由于我不明白如何使用该解决方法,因此我尝试使用其他工具(目前)复制该psbook行为。psnuppstopsmpage

问题是,网上所有关于制作小册子的说明都假设我有 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

相关内容