将 PDF 每页 2 面转换为每页 1 面

use*_*910 14 pdf conversion

如何将每页 2 面的 PDF 转换为每页 1 面?

Kur*_*fle 24

好的,问题已经在 Acrobat(完整版,而不是 Reader)的帮助下解决了。但是,如果您无法访问 Acrobat,该怎么办?这也可以用 Ghostscript 和 pdftk 来完成吗?

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

...为了它的乐趣,让我们不要使用带有“双倍”页面的输入文件,而是使用带有“三倍”页面的输入文件。实际上,我今天通过电子邮件收到了一份这样的 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!