我正在寻找一种免费工具,可以重新排列PDF文档的页面,并在每张纸上组合多个页面。第一部分(重新安排)很容易通过许多工具解决(我使用PyPDF)。
问题在于第二个要求:将两个(或更多)页面组合成单个页面。例如,取两个页面(A和B),旋转它们,缩放并组合成一个页面,如下
------ ------ ------
| | | | | |
| A | | B | | a |
| | | | | |
| | | | ---> ------
| | | | | |
| | | | | b |
| | | | | |
------ ------ ------
解决方案需要在Linux上运行,最好也在Windows上运行。我正在寻找使用Python或Perl绑定的控制台应用程序或库。
编辑有pdfnup库应该执行这种转换,并且是跨平台的,但由于类似于{{3的错误,我无法使用它}}
答案 0 :(得分:23)
这是我为PDF找到的工具的摘要(我想找到相当于psup和psbook)
来自我的包经理:
制作A6小册子:
pdfbook -2 -p a5 infile.pdf outfile.pdf
pdf-tools包含:
答案 1 :(得分:9)
在Linux上,您可以将PDF文件转换为Postscript并使用psnup
。调用它的确切方法取决于您希望如何将页面放在一起,是否要旋转它们,要使用的纸张尺寸等等,但它会是这样的:
pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf
根据您可用的工具,您可能有更有效的方法来执行此操作 - psnup
当然不是唯一的方法,但它是一个相对知名的程序(无论如何都在Linux上)。
答案 2 :(得分:2)
查看使用this answer强加PDF页面的Multivalent
答案 3 :(得分:2)
如果您使用Linux,则可以使用BookletImposer将多个PDF页面放在一个页面上。
对于Ubuntu用户,此工具可在Ubuntu软件中心获得。
答案 4 :(得分:1)
在回答您的问题时,您需要一个PDF“拼版”工具,这是一种花哨的方式,可以说明将PDF页面图像排列到特定阵列上以创建新的单个PDF页面的工具。想象一下,它就像排版报纸一样。您可以在某个固定尺寸(以cm为单位)的页面上定义一定数量的列宽,一定数量的行深,一定数量的行。然后使用pdf源文件中的页面从上到下,从左到右填充这些空槽。在OP的情况下,他们想要创建一个页面,由两个8.5x11页面组成,这些页面排列成1x2阵列(1列,2行)。它们的页面将按以下顺序放入数组中:1,2。因此,您将第一页(PDF格式的第1页)放入阵列的第一个插槽(第1列,第1行),然后将第二页(第2页)放入第二个插槽(第1列,第2行) )。
如何使用该工具实现此目的: 下载旧版的Multivalent。请注意,作者在没有解释的情况下从最新版本中删除了好的工具类,因此您必须使用较旧的工具类。这是截至02/12的工作链接: http://code.google.com/p/pdfsizeopt/downloads/detail?name=Multivalent20060102.jar 为简单起见,我将jar文件重命名为m.jar。 不言而喻,你需要安装JRE才能工作,但我会把它放在那里。 将m.jar添加到Java类路径环境变量(用于脚本)或使用-cp选项和相对路径运行命令行语法(如下所示)。注意,我在下面的示例中从安装目录的命令行运行它。否则从root提供绝对路径(如c:\ 1 \ bin \ m.jar)。
这是一个完全符合OP发布内容的示例: C:\ 1 \ bin> java -cp m.jar tool.pdf.Impose -dim 1x2 -verbose -papersize“21.59x55.88cm”-layout“1,2”yourfilename.pdf
注意,-dim选项在Columns x Rows中创建数组。 -papersize在这里以厘米为单位指定,但如果你需要英寸,只需乘以英寸2.54即可获得厘米。 -layout选项为您提供要填充阵列中空插槽的顺序,从上到下,从左到右填充。在这种情况下,我们希望页面顶部的pdf和底部的第二页,所以我们的参数是“1,2”。最后一个参数是您的实际源文件。完成后,该工具将输出一个名为yourfilename-up.pdf的文件。
希望有所帮助。
-Matt Zweil
答案 5 :(得分:0)
检查PyPDF的源代码,尤其是rotateClockwise()方法。必须有一个写入页面内容的地方。在内容之前插入“q”运算符(保存状态)和“cm”(使用缩放矩阵的正确参数)和之后的“Q”运算符(恢复状态)。
请参阅PDF documentation以获取有关运算符和页面结构的说明(滚动到底部以获取一些有用的链接)。
不要忘记向PyPDF发送补丁:)
[编辑]您可能还想查看包含pdfnup命令的pdfjam sources。
答案 6 :(得分:0)
这是一个perl函数,用于从第三方应用程序中获取一个完整的prn文件目录,并创建一个合并的pdf文件。
sub runMerged($)
{
my($path) = @_;
print "Generating merged PDFs for $path\n";
my @files = sort(getFiles($path, ".prn\$"));
if (scalar(@files))
{
open(MERGE, ">$path/merged.prn");
for (my $i = 0; $i < scalar(@files); $i++)
{
print MERGE "^L\n" if ($i > 0);
open(FN, "$path/" . $files[$i]);
while (my $line = <FN>)
{
print MERGE $line;
}
close(FN);
}
chdir("$BASE_PATH/txt2pdf");
print `./txt2pdf.pl $path/merged.prn`;
}
}
答案 7 :(得分:0)
本周我有类似的需求。 但是我需要在A3表格(肖像)中重复每张A4页面(横向)“两次”,然后将其切成两半。
我发现了一个Acrobat插件,其中包含大量拼版功能,可以满足我的需求,并且具有30天的全功能试用版。
希望这对其他人有帮助 http://www.pdfsnake.com/
答案 8 :(得分:0)
我和你有同样的问题,这就是我所做的:
答案 9 :(得分:0)
这是一个脚本,用于在这个尺寸加倍的纸张上重复两次页面(如A5,风景)(A4,肖像):
#!/bin/bash
INPUTFILE=$*
PAGENUM=`pdftk ${INPUTFILE} dump_data | grep NumberOfPages | cut -d : -f 2 | cut -d " " -f 2`
PAGES=`seq 1 ${PAGENUM}`
DUPAGES=`for i in ${PAGES} ; do echo $i $i | tr "\n" " " ; done`
OUTPUT1=`basename ${INPUTFILE} .pdf`.dup.pdf
OUTPUT2=`basename ${INPUTFILE} .pdf`.double.pdf
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT1}
pdfjam --nup 1x2 ${OUTPUT1} --outfile ${OUTPUT2}
它并不优雅;它可以在没有第二次pdftk调用的情况下完成,并且它不适用于包含空格的文件。但它适用于多页pdf。
答案 10 :(得分:0)
使用Adobe Acrobat XI Pro打开第1个文档。 编辑,选择&#34;拍摄快照&#34;,然后单击要复制的内容的顶角并拖动到对角。 在Paint中打开一张干净的纸。 单击绘制中的干净纸张并控制V以将第一个文档粘贴到干净的纸张中。 对要在同一页面上组合的第2个项目重复操作,除了在Paint画面中暂时将第2个项目置于第1个项目之外。 然后拖动第二个项目,将其放置在“Paint Sheet”中所需的位置。 保存油漆工作表文件,你就完成了!