Tengo un PDF de 32 páginas de mi árbol genealógico. En lugar de tener el árbol genealógico en una página PDF realmente grande (que es lo que quiero), está formateado para que un grupo de 8 páginas individuales de tamaño carta de EE. UU. Se unan a lo ancho; 4 filas de esto completa el árbol. Los márgenes de cada página son 22px.

Si lo visualiza en forma de tabla (donde los números representan números de página PDF):

table

He intentado crear un código Python para hacer esto, pero no he llegado muy lejos. ¿Cómo puedo unir el PDF para que pueda ser una página grande en lugar de páginas individuales más pequeñas?

Gracias por la ayuda.

EDITAR: Aquí está el código que escribí. Perdón por no publicarlo originalmente.

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()
8
hao_maike 5 jul. 2011 a las 04:36

3 respuestas

La mejor respuesta

Como alternativa a sugerencia de convertir primero a PostScript y realizar una transformación" N-up "en los archivos PostScript, también hay una utilidad llamada pdfnup disponible como parte de PDFjam suite, que puede funcionar directamente en archivos PDF. Ejemplo:

pdfnup --nup 8x4 --outfile output.pdf input.pdf
6
Community 23 may. 2017 a las 12:30

Si tiene una instalación de LaTeX, le recomendaría usar

  1. el paquete pdfpages,
  2. un pequeño script / documento LaTeX de 10 líneas,
  3. y el comando pdflatex.

El script de LaTeX

Guarde el siguiente script de LaTeX como 8x4-letter.tex. Adapte el /path/to/input.pdf en consecuencia:

\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}

El comando pdflatex

Ahora corre

pdflatex 8x4-letter.tex

Esto debería producir un archivo PDF, 8x4-lettter.pdf.

Si desea marcos alrededor de cada página, use frame=true. Para agregar espacio adicional entre páginas, use delta=10 10 o delta=17 11 o lo que más le convenga. Es posible que también desee cambiar el valor de scale=....

0
Kurt Pfeifle 31 mar. 2015 a las 19:42

Use pdf2ps (parte de Ghostscript) para convertir el PDF a PostScript. Esta suele ser una transformación sin pérdidas. Luego use las técnicas de http://www.tailrecursive.org/postscript/nup.html o cualquier otro preámbulo PostScript "N-up" para reorganizar sus páginas.

El enlace de muestra combina un script en perl para modificar el PostScript para insertar algunos fragmentos, pero puede encontrar ejemplos más sofisticados que anulan showpage para que pueda insertar su preámbulo con el showpage redefinido al comienzo de su documento

1
Ben Jackson 5 jul. 2011 a las 01:16