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

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

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

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

答案1

尝试布里斯

替代文本

它允许您使用 GUI 定义区域,将每个页面拆分成任意数量的子页面。它会将所有相似的页面分组,因此您只需为该组定义一次区域即可。

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

答案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 讲义,请查看它们。

http://arminstraub.com/software/krop

https://sites.google.com/site/pdfscissors/

相关内容