我想打印一本书并装订它,但我无法打印正确的页面顺序。
这本书有248页。
我想像这样打印它(双面),但分成两个“段”:
按以下顺序从上到下、从左到右:
第一部分:1.1. 第一篇论文:正面:2,4,15,13 背面:16,14,1,3
1.2. 第二篇论文:正面:6,8,11,9 背面:12,10,5,7
第二部分:等等……
我使用一张 A4 纸,然后将其水平和垂直折叠成 A6 格式。
是否有一个程序或脚本可以为我解决这个问题,以便将来的打印?
至少一个脚本遵循以下序列:2,4,15,13,16,14,1,3,6,8,11,9,12,10,5,7,18,20,31,29,32,30,17,19,22,24,27,25,28,26,21,23...
感谢您的帮助。
答案1
我有点迟到了,但有几种方法可以完成所要求的任务。为了帮助其他像我一样问过这个问题的人,我将推荐我在 Manjaro Linux 中测试过的三种工具,但它们在 Ubuntu 中也应该很容易安装和使用:
- PDF::拼大版
- pdfimpose
- jPDF 调整
PDF::拼大版
这是一个命令行脚本,由以下人员用 Perl 编写马可·佩索托,有几个方便的选项施加文档。PDF::Imposition 附带了允许用户在多个拼版布局中进行选择的架构。对于这个特定问题,要使用的架构是2x4x1,由丹尼尔·德雷南·埃尔阿瓦尔。
首先,从综合 Perl 档案网络 (CPAN)使用以下命令:
cpan PDF::Imposition
然后运行:
pdf-impose.pl --schema "2x4x1" input.pdf output.pdf
pdfimpose
与第一个选项类似,pdfimpose
也是一个命令行脚本。它由以下人员用 Python 编写:路易斯·帕特诺几乎没有依赖关系。它似乎没有与 PDF::Impose 一样强大,但它可以进行多种版面布局。
如果你对 Python 比 Perl 更熟悉,可以尝试使用 pip 下载并安装:
pip install pdfimpose
然后运行:
pdfimpose --size 2x2 input.pdf --output output.pdf
免责声明:得到的结果不同轻微地从所问的问题可以看出这里。
jPDF 调整
jPDF Tweak 是一款 PDF 修改软件,根据其网站介绍,可以合并、拆分、旋转、重新排序、加水印、加密、签名以及以其他方式调整 PDF 文件. 它是用 Java 编写的迈克尔·希尔具有图形用户界面 (GUI)。对于这个特定问题,将使用 Shuffle/N-up 选项卡。此选项卡还提供布局预览,这有助于很多当尝试强加 PDF 时。
首先,下载并安装 jPDF Tweak。虽然它不在 Debian 或 Ubuntu 存储库中,但有可用的二进制文件适用于 x64 和 x86 架构。如果这不起作用,Windows 版本应该可以在 Wine 中正常运行。另一个黑客替代方案是从下载平均房颤,查看 PKGBUILD 并尝试重现安装。
安装 jPDF Tweak 后:
- 选择输入文件(例子);
- 选择输出文件(例子);
在随机播放/N 向上标签:
- 检查随机播放复选框。
- 选择小册子 2 合 裁切預設。
- 使用以下配置字符串:
-8:!-5U0.5-100.0%-200.0%,+4U0.5-200.0%-200.0%,-8N0.5+0.0%+0.0%,+1N0.5+100.0%+0.0%,!+3U0.5-100.0%-200.0%,-6U0.5-200.0%-200.0%,+2N0.5+0.0%+0.0%,-7N0.5+100.0%+0.0%
- 点击
Use
按钮更新设置; - 单击
run
按钮以拼版 PDF(例子)。
我对 jPDF Tweak 唯一担心的是它已经 9 年多没有更新了,但是,它运行良好,并且效果很好。
其他选择:
您还可以探索的其他选项包括:
- pdfbook2,由 Python 编写约翰内斯·诺伊曼。
- PDF::Impose由 Ruby 编写詹米斯·巴克。
答案2
通常,应用程序按顺序输出页面,以便将一页打印到一张纸上。要将输出打印为书籍或小册子,需要进行后续修改。
有时,打印机驱动程序可以进行简单的转换,例如双面打印或在同一方向每张纸上放两页。将页面排序为简单的书帖可以由许多 PDF 实用程序处理(书帖是一组页面,通常在中间折叠在一起,并作为构成书籍的部分之一装订)。对于小型作业,也有许多网站可以为您进行转换。
您想要执行的操作不是我所知道的任何 PDF 软件的内置功能。它需要将整个文档分解为签名;以复杂的方式对正面和背面以及顶部和底部之间的页面进行排序;将页面布局为 4 页并旋转一半页面,将它们混合在一张纸内;将内容缩放到较小的尺寸;并进行调整以允许在正确的页面边缘进行装订和可能的修剪。您可以手动执行此操作,也可以使用脚本结合 PDF 实用程序执行此操作。为了让您了解脚本是什么样子,请参阅Ubuntu - 拼版或如何从文档中打印一本书,而这仅仅是将书页按一半大小排序以便签名。对于一本 248 页的书来说,这需要做很多工作。
有许多小册子打印程序,但大多数都不是为如此复杂的东西设计的(而且在 Linux 中运行的程序也不多)。你可以调查Pdf小册子。我没有用过,但它相当复杂。据我所知,它可以满足您的需要,但需要逐页进行一些手动设置(它允许对偶数页和奇数页进行单独设置,但在这种情况下这无济于事)。
当我还在使用 Windows 的时候,我大量使用一款名为点击书,它可以快速将任何文档转换为任何书籍或小册子格式,等等。我认为您想要做的是内置格式。如果不是,您可以定义格式。它适用于 Windows 和 Mac,但不适用于 Linux,并且无法在 Wine 中运行(我试过,可能与它们的 DRM 控制有关)。它现在的售价为 50 美元,尽管有 15 天的免费试用期。如果您只有一份工作,我会获得免费试用版并找到一台 Windows 或 Mac 计算机来运行它。如果您需要定期打印各种书籍和小册子格式,那么如果您可以随时使用 Windows 或 Mac 计算机,您将物有所值。我还没有找到它的 Linux 替代品。
答案3
您需要一些简单的工具来解决这个特定问题。首先,如果您使用的是 Linux,则应安装 Python(如果尚未安装)。任何版本的 Python 都可以完成这项工作。以下是安装它的命令:
sudo apt install python3
你还没完,如果你读了代码,你会发现我们正在使用一个名为 numpy 的库。要安装它,最简单的方法是通过“pip”
通过以下命令安装 pip:
sudo apt install pip
然后使用 pip 安装 numpy:
pip install numpy
现在剩下的就是将该脚本复制到一个新文件中:
import numpy as np
import sys
pages = int(sys.argv[1])
pages /= 8
if (pages % 2 == 0):
pass
else:
pages += 1
a = np.arange(1, pages*8+1).reshape(pages, 8)
final = []
for i in a:
t = i[0]
i[0] = i[0]
i[0] = t
t = i[1]
i[1] = i[7]
i[7] = t
t = i[2]
i[2] = i[2]
i[2] = t
t = i[3]
i[3] = i[5]
i[5] = t
t = i[4]
i[4] = i[6]
i[6] = t
t = i[7]
i[7] = i[5]
i[5] = t
for i in a:
for j in i:
final.append(j)
print(final)
然后另存为:
whatever.py
现在,要使用它,打开终端并输入此命令:
python whatever.py 123
请注意,123 是您的 pdf 的页数。将其更改为您拥有的页数。
输出将是一系列页面,如下所示:
[1, 8, 3, 6, 7, 2, 5, 4, 9, 16, 11, 14, 15, 10, 13, 12, 17, 24, 19, 22, 23, 18, 21, 20, 25, 32, 27, 30, 31, 26, 29, 28, 33, 40, 35, 38, 39, 34, 37, 36, 41, 48, 43, 46, 47, 42, 45, 44...]
现在您要做的就是复制不带括号的序列:“[”,“]”
然后打开您的文档,单击“打印”,如果您使用默认系统打印对话框,您将得到如下内容:
[
现在选择“范围”下的“页面”并粘贴不带括号的序列。
最后,单击页面设置选项卡并选择以下选项:
[
您可以“预览”您的文档以查看页面比例和顺序是否正确,或者直接按“打印”进行打印。
!!:这些说明仅适用于 1 张纸 2 个部分的 8 页拼版。
!!:我可能必须把它变成一个更复杂的程序,任何更新都会在这里。
你的书将会是这样的:
----------------- -----------------
| | | | | |
| | | | | |
| 1 | 2 | | 3 | 4 | . . .
| | | | | |
|_______|_______| |_______|_______|
sheet 1 - top-front sheet 1 - top-back
----------------- -----------------
| | | | | |
| | | | | |
| 5 | 6 | | 7 | 8 | . . .
| | | | | |
|_______|_______| |_______|_______|
sheet 1 - bottom-front sheet 1 - bottom-back
答案4
最基本的方法(自己做应该不难):
- 将页面提取成图像(例如下面的 pdfimages,其他的可能是更好的选择)
- 通过使用 ImageMagick/convert 等为每张纸合成 4 幅图像(使用您熟悉的任何脚本语言)。
- 打印2中的图像
$ pdfimages--帮助 pdfimages 版本 0.41.0 版权所有 2005-2016 Poppler 开发者 - http://poppler.freedesktop.org 版权所有 1996-2011 Glyph & Cog, LLC 用法:pdfimages [选项] -f :要转换的第一页 -l :要转换的最后一页 -png :将默认输出格式更改为 PNG -tiff :将默认输出格式更改为 TIFF -j :将 JPEG 图像写入 JPEG 文件 -jp2 :将 JPEG2000 图像写入 JP2 文件 -jbig2 :将 JBIG2 图像写入 JBIG2 文件 -ccitt :将 CCITT 图像写入 CCITT 文件 -all :相当于 -png -tiff -j -jp2 -jbig2 -ccitt -list:打印图像列表而不是保存 -opw:所有者密码(用于加密文件) -upw :用户密码(用于加密文件) -p :在输出文件名中包含页码 -q :不打印任何消息或错误 -v :打印版权和版本信息 -h :打印使用信息 -help :打印使用信息 --help :打印使用信息 -? :打印使用信息
注意:质量的选择由您(用户)决定;只需渲染更大的图像(= 更高的分辨率、像素数),然后将其输入到打印过程中。
这将允许打印过程创建更高质量的打印件,假设您将其设置为使用更高的分辨率,它必须遵循并匹配图像。
(请注意,pdfimages 似乎没有与分辨率相关的选项)
但是,在某个时候,提高图像分辨率的增益将会减小。
如果您一次渲染一个页面(甚至批量渲染),内存和磁盘要求将是可控的,甚至“很低”。