【问题标题】:How can I combine two PDF pages show up on the same page? [closed]如何合并显示在同一页面上的两个 PDF 页面? [关闭]
【发布时间】:2010-10-06 20:29:17
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: pdf pdf-generation


    【解决方案1】:

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

    【讨论】:

    • Adobe Acrobat XI Pro 不是免费工具,是吗?这就是 OP 所要求的。
    • 我们通常不会在我们的程序中加入人类。 (无论如何,这个问题并不是主题)
    【解决方案2】:

    这是一个脚本,用于在两倍大小的纸张(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。

    【讨论】:

      【解决方案3】:

      这是我为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

      【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          如何使用该工具来实现这一点: 下载旧版本的多价。注意作者从最新版本中删除了好的工具类,没有解释,所以你必须使用旧的。这是截至 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" yourfilename.pdf

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

          希望对您有所帮助。

          -马特·兹韦尔

          【讨论】:

            【解决方案7】:

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

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

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

            【讨论】:

              【解决方案8】:

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

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

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

              【讨论】:

              • 应该是pdf2ps infile.pdf infile.ps
              • @Ian:我相信你是对的,谢谢你的理解;)我会解决的。
              【解决方案9】:

              查看使用Multivalent 拼版PDF 页面的this answer

              【讨论】:

                【解决方案10】:

                这是一个 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`;
                    }
                }
                

                【讨论】:

                  【解决方案11】:

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

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

                  别忘了给 PyPDF 发送补丁 :)

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

                  【讨论】:

                    猜你喜欢
                    • 2013-06-13
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-03-16
                    • 2011-05-04
                    • 2019-10-30
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多