如何将多个PDF页面拼接成一个类似画布的大PDF?

时间:2011-07-05 00:36:25

标签: python pdf pdflatex

我的家谱有32页PDF。它不是将家谱全部放在一个非常大的PDF页面上(这就是我想要的),而是将其格式化为一组8个单独的美国字母大小的页面应该在宽度上拼接;这4行完成了树。每页的边距都是22px。

如果您以表格形式显示它(数字代表PDF页码):

table

我试图用一些Python代码来做这件事,但还没有走得太远。如何拼接PDF以使其可以是一个大页面而不是较小的单个页面?

感谢您的帮助。

编辑:这是我写的代码。很抱歉没有发布它。

from pyPdf import PdfFileWriter, PdfFileReader

STITCHWIDTH = 8;
currentpage = 1;

output = PdfFileWriter()
input1 = PdfFileReader(file("familytree.pdf", "rb"))

for(i=0; i<=4; i++)
    output.addPage(input1.getPage(currentpage))
    currentpage++;
    #do something to add other pages to width

print "finished with stitching"

outputStream = file("familytree-stitched.pdf", "wb")
output.write(outputStream)
outputStream.close()

3 个答案:

答案 0 :(得分:5)

作为Ben Jackson首次转换为PostScript的suggestion的替代方案,并对PostScript文件进行“N-up”转换,还有一个名为pdfnup的实用程序可用作{ {3}}套件,可直接在PDF文件上运行。例如:

pdfnup --nup 8x4 --outfile output.pdf input.pdf

答案 1 :(得分:1)

使用pdf2ps(Ghostscript的一部分)将PDF转换为PostScript。这通常是无损变换。然后使用http://www.tailrecursive.org/postscript/nup.html或任何其他“N-up”PostScript前导码技术重新组织您的页面。

示例链接结合了一个perl脚本来修改PostScript以插入一些片段,但是您可以找到覆盖showpage的更复杂的示例,以便您可以在重新定义的showpage处插入前导码。文档的开头。

答案 2 :(得分:0)

如果你有一个LaTeX安装,我建议使用

  1. pdfpages包,
  2. 一个10行的LaTeX脚本/文档,
  3. pdflatex命令。
  4. LaTeX脚本

    将以下LaTeX脚本保存为8x4-letter.tex。相应地调整/path/to/input.pdf

    \documentclass{article}
    \usepackage{color}
      \definecolor{mygray}{rgb}{.9,.9,.9} % background color for complete poster
      \pagecolor{mygray}                  % line must *precede* \usepackage{pdfpages}
    \usepackage[final]{pdfpages}          % comment out for testing
    \usepackage[paperwidth=4896ppt, paperheight=3168]{geometry}
                                          % dimensions of 8 letter widths, 4 heights
    
    \pagestyle{plain}                     % do not use page numbering
    \begin{document}                      % orig. slide sizes are 612x792 pts (Letter)
      \includepdf[nup=8x4,                % 8x4 grid was asked for
                  delta=0 0,              % horiz.+vert. distance between slides
                  scale=0.999,            % scale down for additional margins
                  pages={1-32},           % input document has 32 pages
                  noautoscale=false,      % set to true if you have larger pages
                  frame=false]            % set to true if you want frames
                  {/path/to/input.pdf}    % filename+path cannot have spaces!
    \end{document}
    

    pdflatex命令

    现在运行

    pdflatex 8x4-letter.tex
    

    这应生成PDF文件8x4-lettter.pdf

    如果您想在每个页面周围使用框架,请使用frame=true。要在页面之间添加额外的间距,请使用delta=10 10delta=17 11或适合您的任何内容。您可能还想更改scale=...的值。