Kur*_*fle 24
好的,问题已经在 Acrobat(完整版,而不是 Reader)的帮助下解决了。但是,如果您无法访问 Acrobat,该怎么办?这也可以用 Ghostscript 和 pdftk 来完成吗?
...为了它的乐趣,让我们不要使用带有“双倍”页面的输入文件,而是使用带有“三倍”页面的输入文件。实际上,我今天通过电子邮件收到了一份这样的 PDF。那是一张传单,折叠在Leporello's Scheme 中。纸张尺寸为 A4 横向(842pt x 595pt),折叠和布局如下:
Front side to be printed, page 1 of PDF
+--------+--------+--------+ ^
| | | | |
| 5 | 6 | 1 | |
| | | | 595 pt
| | | | |
| | | | |
| | | | |
+--------+--------+--------+ v
^ ^
fold fold
v v
+--------+--------+--------+ ^
| | | | |
| 2 | 3 | 4 | |
| | | | 595 pt
| | | | |
| | | | |
| | | | |
+--------+--------+--------+ v
Back side to be printed, page 2 of PDF
<---------- 842 pt -------->
Run Code Online (Sandbox Code Playgroud)
我想创建 1 个包含 6 页的 PDF,每页的大小都不寻常,为 280.67pt x 595 pt。
让我们首先从每个输入页面中提取左侧部分:
gswin32c.exe ^
-o left-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [0 0]>> setpagedevice" ^
-f myflyer.pdf
Run Code Online (Sandbox Code Playgroud)
这些参数做了什么?
-o ...............:
命名输出文件。隐式也使用-dBATCH -dNOPAUSE -dSAFER
.-sDEVICE=pdfwrite :
我们想要 PDF 作为输出格式。-g................:
以像素为单位设置输出媒体大小。pdfwrite 的默认分辨率是 720 dpi。因此,乘以 10 以获得 PageOffset 的匹配项。-c "..............:
要求 Ghostscript 在主输入文件(需要跟在 之后-f
)之前处理给定的 PostScript 代码片段。<</PageOffset ....:
设置介质上页面图像的移动。(当然,对于左页, shift by[0 0]
没有实际效果。)-f ...............:
处理这个输入文件。最后一条命令实现了哪个结果?
这个:
Output file: left-sections.pdf, page 1
+--------+ ^
| | |
| 5 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: left-sections.pdf, page 2
+--------+ ^
| | |
| 2 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Run Code Online (Sandbox Code Playgroud)
现在让我们为中心部分做类似的事情:
gswin32c.exe ^
-o center-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [280.67 0]>> setpagedevice" ^
-f myflyer.pdf
Run Code Online (Sandbox Code Playgroud)
结果:
Output file: center-sections.pdf, page 1
+--------+ ^
| | |
| 6 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: center-sections.pdf, page 2
+--------+ ^
| | |
| 3 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Run Code Online (Sandbox Code Playgroud)
最后,正确的部分:
gswin32c.exe ^
-o right-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [561.34 0]>> setpagedevice" ^
-f myflyer.pdf
Run Code Online (Sandbox Code Playgroud)
结果:
Output file: right-sections.pdf, page 1
+--------+ ^
| | |
| 1 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: right-sections.pdf, page 2
+--------+ ^
| | |
| 4 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Run Code Online (Sandbox Code Playgroud)
现在我们将页面合并到一个文件中:
pdftk.exe ^
A=right-sections.pdf ^
B=center-sections.pdf ^
C=left-sections.pdf ^
cat A1 B2 C2 A2 B1 C1 ^
output single-files-input.pdf
verbose
Run Code Online (Sandbox Code Playgroud)
完毕。这是想要的结果。6 个不同的页面,大小为 280.67x595。
结果:
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ ^
| | | | | | | | | | | | |
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | |
| | | | | | | | | | | | 595 pt
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ v
< 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt >
Run Code Online (Sandbox Code Playgroud)
小智 5
刚刚遇到了同样的问题。我偶然发现了 briss,一个用于分离和裁剪 pdf 页面的开源 Java GUI 工具:
http://sourceforge.net/projects/briss/
它在 Linux 上对我来说非常有效,尽管用户界面并不完全简单。它甚至可以处理具有一些不同大小页面的 pdf!