Come unire più file PDF su una pagina con pdftk?


35

Ho una serie di file PDF 1.pdf, 2.pdfecc che vorrei di unire in un unico file, con tutti i PDF affiancate su una sola pagina.

Attualmente, ho provato pdftka unire questi file, ma sono inseriti in pagine separate:

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

C'è un modo, invece, per affiancare i singoli file PDF in una pagina master merged.pdf?


1
Nei casi in cui l'utilizzo di un'app GUI è OK, una buona alternativa è pdfsam.org
reinierpost

1
Hai trovato una risposta da accettare?
Léo Léopold Hertz

Questo link: verypdf.com/wordpress/201302/… mostra che VeryPDF PDF Stitcher può svolgere il lavoro in verticale o lateralmente. Scarica da: verypdf.com/app/pdf-stitch/index.html
Zimba,

Risposte:


29

Ho provato questo oggi:

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

Mette 2 pagine su una pagina.


funziona anche con Windows (con wsl )sudo apt-get install pdfjam
Jan-Glx,

4
se vuoi incollare le pagine in verticale, usa--nup 1x2 --no-landscape
jan-glx il

Se non si desidera ridimensionamento automatico delle pagine (il mio allunga l'output per riempire a4 per impostazione predefinita), utilizzare--noautoscale true
Jonathan Y.

1
La domanda è su pdftk, non pdfjam. Questo non risponde alla domanda; è un suggerimento per trovare un'alternativa
Zimba,

6

Il pdfnup basato su pdfLaTeX potrebbe funzionare per te. Se hai molti file pdf potresti dover creare una lunga pipe di pdfjam o eseguirla più volte.

C'è anche pdfnup in Python .


4

Non sono sicuro di cosa intendi tiled on one page. Stavo cercando un modo per unire più PDF su una pagina, sopra un'altra. Questo può essere fatto in pdftkquesto modo:

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


3

Questo script affiancherà le pagine pdf per te. Cambia la sezione in quello che ti serve per pagina.

#!/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

Se i nomi dei file sono in un ordine "specifico del sistema", allora pdftk *.pdf cat output merged.pdfdovrebbe funzionare bene.

Ecco cosa intendo per ordine "specifico del sistema".

Esempio:
ho 3 file sul mio Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf I
file vengono uniti nell'ordine: 10.pdf 1.pdf 2.pdf ( ls -lrestituito lo stesso ordine del file unito)

Convenzione sulla denominazione più sicura: 0001.pdf, 0002.pdf, ecc.


1
Come ho detto, questo comando crea un PDF multipagina. Come indicato nella mia domanda, sto cercando il metodo di utilizzo pdftkper creare un PDF di una pagina che contenga PDF di input come riquadri.
Alex Reynolds,

Combina la mia risposta con @ micke's. Non ho verificato se pdfnup può prendere il nome con il carattere jolly (* .pdf) come argomento, ma puoi usare il pdf generato da pdftk. Controlla pdfnupo pdfjamcon --nupopzione.
szemek,

A meno che non li citiate, i caratteri jolly come *vengono espansi dalla shell che state utilizzando. pdfnupnon vede mai *.pdf, invece vede un elenco di tutti i file nella directory di lavoro con i nomi dei file che terminano con .pdf.
evilsoup,

0

Se hai un gran numero di PDF in una struttura di cartelle e hai un'installazione TeX, questo script mette tutti i PDF ricorsivamente in un unico file di grandi dimensioni:

    #!/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"

Non ho scritto quel codice, l'ho preso da una discussione qui: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

È molto utile. Ho tradotto alcuni commenti tedeschi in inglese.

Saluti, Alexander



-1
  1. Salva le pagine desiderate in un documento PDF con qualcosa come Acrobat Pro.

  2. Stampa documento utilizzando più pagine su una funzione di pagina, torna a un documento pdf.

Più pagine in una singola pagina. :-)


Vedo che la tua risposta è sottoposta a downgrade senza un commento. Non è bello, ma ci sono certamente modi per migliorare la tua risposta. Migliora la sua grammatica, aggiungi una descrizione in alto sul perché lo stai facendo, ecc.

ha votato a favore di questa risposta - solo perché i voti bassi senza un commento non sono fantastici IMO!
Jeremy Davis,

1
Sottovalutato perché il soggetto dice "con pdftk". La tua risposta non è forse fuori tema, ma chiaramente non è ciò che l'interrogante sta cercando.
Nik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.