如何将每页2面的PDF转换为每页1面?
如何将每页2面的PDF转换为每页1面?
Answers:
好的,已经在Acrobat(完整版本,而不是Reader)的帮助下解决了该问题。但是,如果您无法访问Acrobat,该怎么办?是否可以同时使用Ghostscript和pdftk?
…并且为了它的乐趣,我们不要将输入文件与“双倍”页面一起使用,而要让文件与“高倍”一起使用。实际上,我今天通过电子邮件收到了一份这样的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 >
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
。
只是有同样的问题。我偶然发现了briss,这是一个用于分隔和裁剪pdf页面的开源Java GUI工具:
http://sourceforge.net/projects/briss/
即使在用户界面上并非微不足道,它在Linux上对我也非常有效。它甚至可以处理带有不同大小页面的pdf文件!
@peims,谢谢。这是方法的分步版本。我在想要转换为Kindle DX的文件上进行了尝试,它可以完美运行:
接下来,使用pdftk.exe(来自http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)将结果插入单个文件中。将“ pdftk.exe”,“ left.pdf”和“ right.pdf”复制到“ D:\”,然后执行:
注意:如果将文件复制到“ C:\”,由于安全权限,在Win 7下将无法使用。如果没有D:\,则创建目录“ C:\ x”以完成操作。
这些结果通常足够好。但是,还有两个可选步骤可以改善输出。
您可以复制文档,然后裁剪页面,以便在一个文件中仅显示偶数页码,在另一个文件中仅显示奇数页码。然后将文件分成单页并重新组合以使一个文档的一面单面到一页...
您可以使用多种方法来执行此操作,例如:
我使用以下脚本在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
感谢您的参考。我当时遇到类似的问题,但想分享对我有用的东西。
我有一个横向的小报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的肖像,更具可读性。
尚未提及Krop(Python)和PDFscissors(Java),请检查它们是否具有要恢复为正确的演示文稿PDF的pdfnup-ped讲义。