如何将 PDF 的页面从中间拆分?

YGA*_*YGA 42 pdf ghostscript

有谁知道将 pdf 的页面从中间拆分成两个新页面的好方法吗?

需要明确的是,我并不是要从 pdf 中分离出已经存在的页面;我正在尝试从现有的单个页面创建两个新页面。

Kur*_*fle 41

您可以在 Ghostscript 的帮助下解决此问题。pdftk单独不能做到这一点(据我所知)。我将为您提供手动执行此操作的命令行步骤。将此脚本作为一个过程将很容易,也可以使用不同的页面大小和页码参数。但是你说你可以自己做;-)

如何在 Ghostscript 的帮助下解决这个问题...

...为了它的乐趣,我最近没有使用具有“双倍”页面的输入文件,而是使用具有“三倍”页面的输入文件。您可以在其他回复中阅读此案例的答案。

你的情况更简单。你似乎有类似的东西:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->
Run Code Online (Sandbox Code Playgroud)

您想创建 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
Run Code Online (Sandbox Code Playgroud)

这些参数做了什么?

首先,要知道在 PDF 中1 inch == 72 points。那么剩下的就是:

  • -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
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: left-sections.pdf, page 2
+------------+  ^
|            |  |
|     3      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->
Run Code Online (Sandbox Code Playgroud)

第二步

接下来,正确的部分:

gs \      
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf
Run Code Online (Sandbox Code Playgroud)

结果:

Output file: right-sections.pdf, page 1
+------------+  ^
|            |  |
|     2      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: right-sections.pdf, page 2
+------------+  ^
|            |  |
|     4      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->
Run Code Online (Sandbox Code Playgroud)

最后一步

现在我们将这些页面合并为一个文件。我们也可以使用 ghostscript 来做到这一点,但我们将使用pdftk它,因为它对于这项工作更快:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle A B \
  output single-pages-output.pdf
  verbose
Run Code Online (Sandbox Code Playgroud)

完毕。这是想要的结果。4 个不同的页面,大小为 421x595 pt。

结果:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            | 595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->
Run Code Online (Sandbox Code Playgroud)

  • 漂亮!如果您想继续免费获得赞成票,您应该在每个答案中使用它! (3认同)
  • 当我使用负偏移量时,第二步只对我有用:`"&lt;&lt;/PageOffset [-421 0]&gt;&gt; setpagedevice"`。我想这取决于原始文件的方向。尽管如此,优秀的答案。:) (2认同)

fra*_*ous 27

试试布里斯

替代文字

通过使用 GUI 定义区域,您可以根据需要将每个页面拆分为任意数量的子页面。它将所有相似的页面为您分组,因此您可以为该组定义一次区域。

它是跨平台、免费和开源的。


Peq*_*que 14

感谢 @marttt 和他们在 Unix & Linux 中回答

您可以使用mutool(作为 的一部分mupdf):

mutool poster -x 2 input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)

-y如果要执行垂直拆分,也可以使用。