27

我正在寻找一种免费工具,该工具允许重新排列 PDF 文档的页面并在每张纸上组合多个页面。第一部分(重新排列)很容易被许多工具解决(我使用PyPDF)。

问题在于第二个要求:将两个(或更多)页面组合​​成一个页面。例如,取两页(A 和 B),将它们旋转、缩放并组合成一个页面,如下所示

------       ------            ------
|     |      |      |          |     |
|  A  |      |  B   |          | a   |
|     |      |      |          |     |
|     |      |      |  --->    ------
|     |      |      |          |     |        
|     |      |      |          | b   |        
|     |      |      |          |     |        
------       ------            ------

该解决方案需要在 Linux 上运行,最好也可以在 Windows 上运行。我正在寻找带有 Python 或 Perl 绑定的控制台应用程序或库。

编辑pdfnup库,它应该完全执行这种转换,并且是跨平台的,但是由于类似于this的错误,我无法使用它。

4

11 回答 11

26

这是我为PDF找到的工具的摘要(我想找到psup和psbook的等价物)

  • 创建小册子:pdfbook、pdf-tools(命令:pdfbklt)
  • 合并 PDF 文件:pdfmerge、pdfjam(命令:pdfjoin)
  • 旋转页面:pdfjam(命令:pdf90)
  • 每张多页:pdfjam(命令:pdfnup)
  • 创建海报(每页多张):pdfposter

从我的包管理器:

创建 A6 小册子:

pdfbook -2 -p a5 infile.pdf outfile.pdf

pdf-tools 包含:

  • pdfbklt:创建小册子
  • pdfrevert:删除对 PDF 文件的一层更改,尝试最大化输出文件的大小(以考虑线性化 PDF)。
  • pdfstamp:将给定字符串添加到给定位置、字体和大小的 infile .pdf 文件。

还有多价的:http: //multivalent.sourceforge.net/Tools/index.html

于 2010-07-22T13:29:53.530 回答
9

在 Linux 上,您可以将 PDF 文件转换为 Postscript 并使用psnup. 调用它的确切方法取决于您希望将页面组合在一起的确切方式,是否希望它们旋转,要使用的纸张尺寸等,但它会是这样的:

pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf

根据您可用的工具,您可能有更有效的方法来执行此操作 -psnup当然不是唯一的方法,但它是一个相对知名的程序(无论如何在 Linux 上)。

于 2009-02-11T08:07:55.167 回答
2

如果您使用 Linux,您可以使用BookletImposer将多个 PDF 页面放在一个页面上。

对于 Ubuntu 用户,此工具可在 Ubuntu 软件中心获得。

于 2013-03-18T12:02:59.627 回答
1

查看这个使用Multivalent强加 PDF 页面的答案

于 2009-02-13T11:43:15.020 回答
1

在回答您的问题时,您需要一个 PDF 的“拼版”工具,这是一种将 PDF 页面图像排列到特定阵列上以创建新的单个 PDF 页面的工具的一种奇特方式。想象一下,这就像排版报纸。您在特定固定尺寸(以厘米为单位)的页面上定义了一个插槽数组,该数组具有一定数量的列宽,一定数量的行深。然后你用pdf源文件中的页面从上到下,从左到右填充这些空槽。在 OP 的情况下,他们想要创建一个页面,由两个 8.5x11 页面组成,这些页面排列成一个 1x2 数组(1 列,2 行)。他们的页面将按以下顺序放入数组中:1,2。因此,您将第一页(pdf 的第 1 页)放入数组的第一个插槽(第 1 列,第 1 行),

如何使用该工具来实现这一点:下载旧版本的 Multivalent。注意作者从最新版本中删除了好的工具类,没有解释,所以你必须使用旧的。这是截至 02/12 的工作链接: http ://code.google.com/p/pdfsizeopt/downloads/detail ?name=Multivalent20060102.jar 为简单起见,我将 jar 文件重命名为 m.jar。不言而喻,您需要安装 JRE 才能使其工作,但我会把它放在那里。将 m.jar 添加到您的 Java 类路径环境变量(用于脚本)或使用 -cp 选项和相对路径(如下所示)运行命令行语法。请注意,我在下面的示例中从安装目录的命令行运行它。否则提供来自根目录的绝对路径(如 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 " 你的文件名.pdf

请注意,-dim 选项在 Columns x Rows 中创建数组。-papersize 在这里以厘米为单位指定,但如果您需要英寸,只需将英寸乘以 2.54 即可得到厘米。-layout 选项为您提供要填充阵列中空槽的顺序,从上到下和从左到右填充。在这种情况下,我们希望 pdf 的第一页在顶部,第二页在底部,所以我们的参数是“1,2”。最后一个参数是您的实际源文件。完成后,该工具将输出一个名为 yourfilename-up.pdf 的文件。

希望有帮助。

——马特·茨韦尔

于 2012-02-05T11:13:01.863 回答
0

查看 PyPDF 的源代码,尤其是 rotateClockwise() 方法。必须有写页面内容的地方。在内容之前插入“q”运算符(保存状态)和“cm”(具有缩放矩阵的正确参数),然后插入“Q”运算符(恢复状态)。

有关运算符和页面结构的说明,请参阅PDF 文档(滚动到底部以获取一些有用的链接)。

不要忘记向 PyPDF 发送补丁 :)

[编辑] 您可能还想检查包含 pdfnup 命令的pdfjam 源。

于 2009-02-11T08:35:59.560 回答
0

这是一个 perl 函数,我用来从 3rd 方应用程序中获取一个充满 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`;
    }
}
于 2009-02-13T11:55:57.393 回答
0

这周我也有类似的需求。但是我需要在 A3 纸(纵向)中“两次”重复每个 A4 页面(横向),然后再切成两半。

我发现了一个 Acrobat 插件,它具有大量的拼版功能,非常适合我的需求,并且功能齐全的 30 天试用版。

希望对其他人有帮助。
http://www.pdfsnake.com/

于 2011-09-30T17:00:38.427 回答
0

我和你有同样的问题,这就是我所做的:

  1. 将pdf文件中的所有页面提取为一个单独的文件
  2. 在 irfanView(带有插件)中,我创建了一个垂直的“全景”图像
  3. 将pdf文件拖到图像部分
  4. 点击创建
  5. “图像”是由所有页面作为一个非常长的垂直图像创建的
  6. 您可以导出为 PDF,质量几乎没有损失。
  7. 享受
于 2014-02-09T07:59:00.200 回答
0

这是一个脚本,用于在两倍大小的纸张(A4,纵向)上重复页面(如 A5,横向)两次:

#!/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。

于 2015-08-07T09:57:36.713 回答
0

使用 Adob​​e Acrobat XI Pro,打开第一个文档。编辑,选择“拍摄快照”,然后单击要复制的内容的上角并拖动到对角。在 Paint 中打开一张干净的床单。单击油漆中的清洁表并控制 V 将第一个文档粘贴到清洁表中。对要在同一页面上组合的第二个项目重复此操作,除了将第二个项目临时放置在油漆表中的第一个项目下。然后拖动第二个项目将其放置在油漆表中您需要的位置。保存油漆表文件,您就完成了!

于 2016-02-09T08:33:10.510 回答