有谁知道将 pdf 页面从中间拆分成两个新页面的好方法吗?
明确地说,我不是尝试从 pdf 中分离出已经存在的页面;我正尝试从现有的单页创建两个新页面。
答案1
答案2
您可以借助 Ghostscript 解决此问题。pdftk
仅凭 Ghostscript 无法做到这一点(据我所知)。我将为您提供手动执行此操作的命令行步骤。将其编写为一个过程很容易,还可以使用页面大小和页码的不同参数。但您说您可以自己做 ;-)
如何在 Ghostscript 的帮助下解决这个问题......
...为了好玩,我最近也这么做了不是输入文件包含“双页”页面,但包含“三页”。您可以阅读此案例的答案在另一个回应中。
你的情况更简单。你似乎有类似这样的情况:
+------------+------------+ ^
| | | |
| 1 | 2 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
^
fold
v
+------------+------------+ ^
| | | |
| 3 | 4 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
<---------- 842 pt -------->
您想要创建 1 个包含 4 页的 PDF,每页大小为 421 pt x 595 pt。
第一步
让我们首先从每个输入页面中提取左侧部分:
gs \
-o left-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [0 0]>> setpagedevice" \
-f double-page-input.pdf
这些参数起什么作用?
首先,要知道 PDF1 英寸 == 72 点。那么剩下的就是:
-o ...............:
命名输出文件。隐式地也使用-dBATCH -dNOPAUSE -dSAFER
。-sDEVICE=pdfwrite :
我们希望 PDF 作为输出格式。-g................:
设置输出媒体大小(以像素为单位)。pdfwrite 的默认分辨率为 720 dpi。因此乘以 10 即可获得 PageOffset 的匹配值。-c "..............:
要求 Ghostscript 在主输入文件(需要跟在后面-f
)之前处理给定的 PostScript 代码片段。<</PageOffset ....:
设置介质上页面图像的移位。(当然,对于左页,移位[0 0]
没有实际效果。)-f ...............:
处理此输入文件。
最后一个命令实现了什么结果?
这个:
Output file: left-sections.pdf, page 1
+------------+ ^
| | |
| 1 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: left-sections.pdf, page 2
+------------+ ^
| | |
| 3 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
第二步
接下来,正确的部分:
gs \
-o right-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [-421 0]>> setpagedevice" \
-f double-page-input.pdf
结果:
Output file: right-sections.pdf, page 1
+------------+ ^
| | |
| 2 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: right-sections.pdf, page 2
+------------+ ^
| | |
| 4 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
最后一步
现在我们将页面合并为一个文件。我们也可以使用 ghostscript 来实现这一点,但我们将使用它pdftk
,因为它可以更快地完成这项工作:
pdftk \
A=right-sections.pdf \
B=left-sections.pdf \
shuffle A B \
output single-pages-output.pdf
verbose
完成。这是所需的结果。4 个不同的页面,大小为 421x595 pt。
结果:
+------------+ +------------+ +------------+ +------------+ ^
| | | | | | | | |
| 1 | | 2 | | 3 | | 4 | |
| | | | | | | | 595 pt
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
+------------+ +------------+ +------------+ +------------+ v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->
答案3
感谢@marttt 和他们的在 Unix 和 Linux 中回答。
您可以使用mutool
(作为的一部分mupdf
):
mutool poster -x 2 input.pdf output.pdf
-y
如果您想执行垂直分割,您也可以使用。
答案4
尚未提及 Krop (Python) 和 PDFscissors (Java),如果您有想要还原回正确演示 PDF 的 pdfnup-ped 讲义,请查看它们。