¿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?


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.


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 .


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


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


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.


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



-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. :-)


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.