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


11

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


这绝对是疯了!是否无法将PDF中的页面设置更改为单面而不是双面?
内森·费尔曼

@Nathan Fellman:疯狂,是的。但是有时候疯狂的事情会带给您最大的乐趣;-)
Kurt Pfeifle


@SkippyleGrandGourou我不知道这个问题是如何关联的。试图在页面上做两种不同事情的问题不是吗?
本N

@BenN:这两个问题都问如何“从现有的单个页面创建两个新页面”,引用另一个页面。投票最多的答案几乎是复制。
Skippy le Grand Gourou

Answers:


23

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

如何借助Ghostscript解决此问题...

…并且为了它的乐趣,我们不要将输入文件与“双倍”页面一起使用,而要让文件与“高倍”一起使用。实际上,我今天通过电子邮件收到了一份这样的PDF。这是一张传单,按照勒波雷洛的计划折叠。图纸尺寸为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 -------->

我想创建1个PDF,包含6页,每页的大小都为280.67pt x 595 pt。

第一步

首先,从每个输入页面中提取左侧部分:

gswin32c.exe ^
    -o left-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [0 0]>> setpagedevice" ^
    -f myflyer.pdf

这些参数是做什么的?

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

Output file: left-sections.pdf, page 2
+--------+  ^
|        |  |
|   2    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

第二步

现在让我们对中间部分进行类似的操作:

gswin32c.exe ^
    -o center-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [280.67 0]>> setpagedevice" ^
    -f myflyer.pdf

结果:

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

Output file: center-sections.pdf, page 2
+--------+  ^
|        |  |
|   3    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

第三步

最后,正确的部分:

gswin32c.exe ^
    -o right-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [561.34 0]>> setpagedevice" ^
    -f myflyer.pdf

结果:

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

Output file: right-sections.pdf, page 2
+--------+  ^
|        |  |
|   4    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

最后一步

现在,我们将页面合并到一个文件中:

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

做完了 这是期望的结果。6个不同的页面,尺寸为280.67x595。

结果:

+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   ^
|        |  |        |  |        |  |        |  |        |  |        |   |
|   1    |  |   2    |  |   3    |  |   4    |  |   5    |  |   6    |   |
|        |  |        |  |        |  |        |  |        |  |        | 595 pt
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   v
< 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt > 

1
废话,很棒的艺术就在这里!
伊沃·弗利普斯

这对我来说效果很好,但是我必须将PageOffset设置为负数才能获取其他部分。
jonchang

您可以将Python用于更大的PDF:f = open("order.dat","w") for i in [a+1 for a in xrange(63)]: f.write("A{0} B{0} ".format(i)) f.close()这将创建一个文件order.dat,并带有“ A1 B1 A2 B2 ... A63 B63”。然后,您可以将其复制粘贴到pdftk
Suuuehgi

4

只是有同样的问题。我偶然发现了briss,这是一个用于分隔和裁剪pdf页面的开源Java GUI工具:

http://sourceforge.net/projects/briss/

即使在用户界面上并非微不足道,它在Linux上对我也非常有效。它甚至可以处理带有不同大小页面的pdf文件!


3

@peims,谢谢。这是方法的分步版本。我在想要转换为Kindle DX的文件上进行了尝试,它可以完美运行:

  • 使用完整版的Acrobat v9裁剪页面的左侧,并将其另存为“ left.pdf”:
    • 使用裁切工具标记页面的左侧。
    • 右键单击,然后选择“设置作物箱”。
    • 选择“文档..裁剪页面”,然后将裁剪应用于整个文档。
  • 重复右侧页面,另存为“ right.pdf”。
  • 在此阶段,您有两个文档:左侧页面为“ left.pdf”,右侧页面为“ right.pdf”。

接下来,使用pdftk.exe(来自http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)将结果插入单个文件中。将“ pdftk.exe”,“ left.pdf”和“ right.pdf”复制到“ D:\”,然后执行:

  • D:> pdftk D:\ left.pdf突发输出%05d_A.pdf
  • D:> pdftk D:\ right.pdf突发输出%05d_B.pdf
  • D:> pdftk * _ ?. pdf cat输出合并.pdf

注意:如果将文件复制到“ C:\”,由于安全权限,在Win 7下将无法使用。如果没有D:\,则创建目录“ C:\ x”以完成操作。

这些结果通常足够好。但是,还有两个可选步骤可以改善输出。

  • (可选的最后一步1)在此阶段,文档很大(我的文档从7MB膨胀到80MB),因此您可以使用以下任一方法来减小文件大小:
    • “高级..PDF优化器”,或:
    • 设置为“与Acrobat 5兼容”的“高级..Preflight”。
  • (可选的最后一步2)页面大小均不同。在所有页面上重复裁剪,因此所有内容都是统一大小。

2

您可以复制文档,然后裁剪页面,以便在一个文件中仅显示偶数页码,在另一个文件中仅显示奇数页码。然后将文件分成单页并重新组合以使一个文档的一面单面到一页...

您可以使用多种方法来执行此操作,例如:

  1. 使用Adobe Acrobat裁剪工具裁剪双页的一侧,然后将裁剪应用于所有页面。
  2. 使用pdftoolkit中的“突发”命令将文件拆分为单独的页面
  3. 使用文件重命名工具(例如ReNamer)重命名文件顺序
  4. 使用pdftoolkit中的'cat'命令重新组合页面

2

我使用以下脚本在Mac和Linux上处理扫描的图书。这会占用大量内存。

#!/bin/bash
#
# This script processes scanned books. After scanning the books have been cropped with
# Preview. This does kind of a "soft crop" that we need to make a bit "harder". 
#
# The second step is to take each page of the PDF and split this into two two pages, 
# because each page of the scanned document actually contains two pages of the book.
#
#

FILE=`mktemp`.pdf
FILE2=`mktemp`.pdf
FILE3=`mktemp`.pdf

echo "Making a temporary copy of the input file."

cp $1 $FILE

#
# Start cropping
#

echo "Cropping the PDF"

# The first regex removes all boxes but CropBox. The second regex renames the  CropBox as MediaBox

perl -pi.bak -e 's/\/(Media|Bleed|Art|Trim)Box[\n\l\f\s]*\[(.+?)\]//msg;' $FILE
perl -pi.bak -e 's/CropBox/MediaBox/g;' $FILE

echo "Validating the PDF"

#Run PDFTK to ensure that the file is OK

cat $FILE | pdftk - output $FILE2

#
# Done cropping, start splitting the pages
#

echo "Splitting the pages in two and changing to 200 dpi with imagemagick. Output goes to $FILE3"

convert -density 200  $FILE2 -crop 50%x0 +repage $FILE3

#
# Done spliting, copy the result in a new file
#


mv $FILE3 $1.pages.pdf

1

感谢您的参考。我当时遇到类似的问题,但想分享对我有用的东西。

我有一个横向的小报pdf,左侧只有纵向的文字。本质上,两页小报缺少页面右侧的任何内容。起点相似,但小报为792×1224(纵向),1124 x 792(横向),而我需要的1/2小报的点定义为612 x 792点。

"C:\Program Files\gs\gs9.10\bin\gswin64c.exe" -o left2.pdf -sDEVICE=pdfwrite -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f "RFP.pdf"

让我将所需的内容变成8.5 x 11的肖像,更具可读性。


0

我了解的是,需要将显示两页(并排在一张纸上)的PDF文件转换为每张纸一页,从而产生两张PDF文件。换句话说,如果在15页上总共有30页,我们需要将PDF文件转换为30页的PDF文件,每页显示一页。如果出现此问题,我已通过指定1到30的页码来使用Adobe acrobat XI PRO“提取页面工具”


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.