¿Cómo combinar múltiples archivos PDF en una página con pdftk?

35

Tengo una serie de archivos PDF 1.pdf, 2.pdf, etc, que me gustaría fusionar en un solo archivo, con todos los archivos PDF de azulejos en una sola página.

Actualmente, he intentado pdftkfusionar estos archivos, pero se colocan en páginas separadas:

pdftk 1.pdf 2.pdf ... cat output merged.pdf

¿Hay alguna manera de, en cambio, colocar los archivos PDF individuales en una página maestra merged.pdf?

Alex Reynolds
fuente
1
En los casos en que usar una aplicación GUI está bien, una buena alternativa es pdfsam.org
reinierpost
1
¿Has encontrado alguna respuesta para aceptar?
Léo Léopold Hertz 준영
Este enlace: verypdf.com/wordpress/201302/… muestra que VeryPDF PDF Stitcher puede hacer el trabajo vertical o lateralmente. Descargar en: verypdf.com/app/pdf-stitch/index.html
Zimba

Respuestas:

29

Probé esto hoy:

pdfjam Page1.pdf Page2.pdf --nup 2x1 --landscape --outfile Page1+2.pdf

Pone 2 páginas en una página.

Ole Tange
fuente
funciona también bajo Windows (con wsl )sudo apt-get install pdfjam
enero-glx
44
si desea pegar páginas verticalmente, use--nup 1x2 --no-landscape
jan-glx
Si no desea que las páginas se escalen automáticamente (la mina extiende la salida para llenar a4 de forma predeterminada), use--noautoscale true
Jonathan Y.
1
La pregunta es sobre pdftk, no pdfjam. Esto no responde la pregunta; es una sugerencia para encontrar una alternativa
Zimba
6

El pdfnup basado en pdfLaTeX podría funcionar para usted. Si tiene muchos archivos pdf, es posible que necesite hacer una larga tubería de pdfjam o ejecutarlo varias veces.

También hay pdfnup en python .

micke
fuente
4

No estoy seguro de a qué te refieres tiled on one page. Estaba buscando una manera de fusionar múltiples archivos PDF en una página, encima de otra. Esto se puede hacer pdftkasí:

pdftk foreground.pdf background background.pdf output merged.pdf

Nik
fuente
3

Este script colocará en mosaico las páginas pdf por usted. Cambia el segmento a lo que necesitas por página.

#!/usr/bin/ruby

latexhead = <<'EOF'
\documentclass{article}
\usepackage[pdftex]{graphicx}
\usepackage[margin=0.1in]{geometry}
\usepackage{pdfpages}
\begin{document}
EOF
latextail = <<'EOF'
\end{document}
EOF

pages = %x[pdfinfo #{ARGV[0]}].split(/\n/).select{|x| x=~ /Pages:/}[0].split(/\s+/)[1].to_i
puts latexhead
s = (1..pages).each_slice(4).to_a
s.each do |a|
  puts "\\begin{figure}"
  a.each do |p|
    puts "\\includegraphics[page=#{p},scale=0.4,width=.5\\textwidth]{#{ARGV[0]}}"
  end
  puts "\\end{figure}"
end
puts latextail
anónimo
fuente
1

puedes usar el montaje de ImageMagick

$ montage *.pdf merged.pdf

ver también http://www.imagemagick.org/script/montage.php

Cesco
fuente
13
El montaje de ImageMagick no manejará las imágenes y fuentes vectorizadas correctamente. Como resultado, la salida del comando de montaje puede verse borrosa. Consulte también la explicación aquí: superuser.com/a/479767/149568
Benedikt Köppel
1
Esto NO responde a la pregunta, que es acerca de pdftk
Zimba
0

Si los nombres de archivo están en orden "específico del sistema", entonces pdftk *.pdf cat output merged.pdfdebería funcionar bien.

Esto es lo que quiero decir con el orden "específico del sistema".

Ejemplo:
Tengo 3 archivos en mi Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf Los
archivos se fusionan en orden: 10.pdf 1.pdf 2.pdf ( ls -ldevolvió el mismo orden que en el archivo combinado)

Convención de nomenclatura más segura: 0001.pdf, 0002.pdf, etc.

szemek
fuente
1
Como dije, este comando crea un PDF de varias páginas. Como se indicó en mi pregunta, estoy buscando el método de uso pdftkpara hacer un PDF de una página que contenga PDF de entrada como mosaicos.
Alex Reynolds
Combina mi respuesta con @ micke's. No he comprobado si pdfnup puede tomar el nombre con comodín (* .pdf) como argumento, pero puede usar el pdf generado por pdftk. Comprobar pdfnupo pdfjamcon --nupopción.
szemek
A menos que los cite, el comodín *que está utilizando expande los comodines como . pdfnupnunca ve *.pdf, en cambio ve una lista de cada archivo en el directorio de trabajo con nombres de archivo que terminan en .pdf.
evilsoup
0

Si tiene una gran cantidad de archivos PDF en una estructura de carpetas y tiene una instalación TeX, este script coloca todos los archivos PDF de forma recursiva en un archivo grande:

    #!/bin/bash
#
# pdfdir OUTPUT_FILE
#
# produces one big PDF file of all PDF files in .
#
if [ $# -ne 1 ] || [ -z "$1" ]; then
  echo "Syntax: pdfdir OUTPUT_FILE"
  exit 1
fi
FILE="$(echo "$1"|sed -e 's/\.\(pdf\|tex\)$//')"
for F in "$FILE" "$FILE.tex" "$FILE.pdf" "$FILE.aux" "$FILE.log" ; do
  if [ -e "$F" ]; then
    echo "$F exists already."
    exit 2
  fi
done
cat >"$FILE.tex" <<EOF
\documentclass{article}%
\usepackage{pdfpages}%
\usepackage{grffile}%
\listfiles%
\begin{document}%
%\tableofcontents%
EOF
# helper functions
exist_pdf_files () {
  [ $(find -L "$1" -name \*.pdf -o -name \*.PDF -type f 2>/dev/null|wc -l) -eq 0 ] && return 1
  return 0
}
list_directories () {
  find -L "$1" -maxdepth 1 -mindepth 1 -type d 2>/dev/null | sort
}
list_pdf_files () {
  # version with " around filenames:
  #find -L "$1" -maxdepth 1 -mindepth 1 -name \*.pdf -o -name \*.PDF -type f 2>/dev/null | sort | \
  #  sed -e 's/^/\\includepdf[pages=-]{"/; s/$/"}%/'
  # version without " around filenames:
  find -L "$1" -maxdepth 1 -mindepth 1 -name \*.pdf -o -name \*.PDF -type f 2>/dev/null | sort | \
    sed -e 's/^/\\includepdf[pages=-]{/; s/$/}%/'
}
tex_headline () {
    echo "$1" | sed -e 's/_/\\_/g'
}
# current folder (lefel 0):
list_pdf_files . >>"$FILE.tex"
# Bearbeite Ebene 1:
list_directories . | while read -r DIR1; do
  # Are there PDFs in folders below that level?
  exist_pdf_files "$DIR1" || continue
  # Yes ...
  tex_headline "\section{${DIR1##*/}}%"
  # those:
  list_pdf_files "$DIR1"
  # Level 2:
  list_directories "$DIR1" | while read -r DIR2; do
    exist_pdf_files "$DIR2" || continue
    tex_headline "\subsection{${DIR2##*/}}%"
    list_pdf_files "$DIR2"
    # Level 3:
    list_directories "$DIR2" | while read -r DIR3; do
      exist_pdf_files "$DIR3" || continue
      tex_headline "\subsubsection{${DIR3##*/}}%"
      list_pdf_files "$DIR3"
      # Level 4:
      list_directories "$DIR3" | while read -r DIR4; do
        exist_pdf_files "$DIR4" || continue
        tex_headline "\paragraph{${DIR4##*/}}%"
        list_pdf_files "$DIR4"
        # Level 5:
        list_directories "$DIR4" | while read -r DIR5; do
          exist_pdf_files "$DIR5" || continue
          tex_headline "\subparagraph{${DIR5##*/}}%"
          list_pdf_files "$DIR5"
        done
      done
    done
  done
done >>"$FILE.tex"
echo "\end{document}%" >>"$FILE.tex"
echo "Sourcecode to PDF directly [J/n]"
read -r ANSWER
case "$ANSWER" in
[JjYy]) ;;
*) exit 0 ;;
esac
pdflatex "$FILE"
[ $? -eq 0 ] && rm -f "$FILE.aux" "$FILE.log" "$FILE.tex"

No he escrito ese código, lo obtuve de una discusión aquí: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

Es muy útil He traducido algunos comentarios alemanes al inglés.

Saludos, Alexander

Keks Dose
fuente
-1
  1. Guarde las páginas deseadas en un documento pdf con algo como Acrobat Pro.

  2. Imprima el documento usando las múltiples páginas en una función de página, de vuelta a un documento pdf

Múltiples páginas en una sola página. :-)

Malcolm
fuente
Veo que su respuesta es rechazada sin un comentario. Eso no es bueno, pero ciertamente hay formas de mejorar su respuesta. Mejore su gramática, agregue una descripción en la parte superior de por qué está haciendo esto, etc.
votó por esta respuesta, ¡solo porque los votos negativos sin un comentario no son geniales en mi opinión!
Jeremy Davis
1
Vota abajo porque el sujeto dice "con pdftk". Quizás su respuesta no esté fuera de tema, pero claramente no es lo que el interlocutor está buscando.
Nik