Wie füge ich mit pdftk mehrere PDF-Dateien auf einer Seite zusammen?


35

Ich habe eine Reihe von PDF - Dateien 1.pdf, 2.pdfetc. , dass ich möchte in einer Datei zusammenführen, mit allen PDF - Dateien auf der einen Seite mit Ziegeln gedeckt.

Derzeit habe ich versucht pdftk, diese Dateien zusammenzuführen, sie werden jedoch auf separaten Seiten abgelegt:

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

Gibt es eine Möglichkeit, stattdessen die einzelnen PDF-Dateien in einer Masterseite zusammenzufassen merged.pdf?


1
In Fällen, in denen die Verwendung einer GUI-App in Ordnung ist, ist pdfsam.org
reinierpost 31.01.12

1
Haben Sie eine Antwort gefunden, die Sie akzeptieren können?
Léo Léopold Hertz 준영

Dieser Link: verypdf.com/wordpress/201302/… zeigt, dass VeryPDF PDF Stitcher die Arbeit vertikal oder seitlich ausführen kann. Download unter: verypdf.com/app/pdf-stitch/index.html
Zimba

Antworten:


29

Ich habe das heute getestet:

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

Es werden 2 Seiten auf eine Seite gelegt.


funktioniert auch unter windows (mit wsl )sudo apt-get install pdfjam
jan-glx 16.03.17

4
Wenn Sie Seiten vertikal kleben --nup 1x2 --no-landscape
möchten

Wenn Sie keine automatische Skalierung der Seiten wünschen (meine Ausgabe dehnt sich standardmäßig auf a4 aus), verwenden Sie--noautoscale true
Jonathan Y.

1
Die Frage stellt sich nach pdftk, nicht nach pdfjam. Dies beantwortet die Frage nicht; Es ist ein Vorschlag, eine Alternative zu finden
Zimba

6

Das pdfLaTeX-basierte pdfnup könnte für Sie funktionieren. Wenn Sie viele pdf-Dateien haben, müssen Sie möglicherweise eine lange Pipe mit pdfjam erstellen oder diese mehrmals ausführen.

Es gibt auch pdfnup in Python .


4

Ich bin mir nicht sicher, was du meinst tiled on one page. Ich suchte nach einer Möglichkeit, mehrere PDF-Dateien auf einer Seite zusammenzuführen - übereinander. Das geht so pdftk:

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


3

Dieses Skript kachelt die PDF-Seiten für Sie. Ändern Sie das Slice auf das, was Sie pro Seite benötigen.

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

Wenn Dateinamen in "systemspezifischer" Reihenfolge vorliegen, pdftk *.pdf cat output merged.pdfsollte dies problemlos funktionieren.

Das meine ich mit "systemspezifischer" Bestellung.

Beispiel:
Ich habe 3 Dateien auf meinem Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf Die
Dateien werden in der folgenden Reihenfolge zusammengeführt: 10.pdf 1.pdf 2.pdf ( ls -ldie gleiche Reihenfolge wie in der zusammengeführten Datei)

Sicherste Namenskonvention: 0001.pdf, 0002.pdf usw.


1
Wie bereits erwähnt, erstellt dieser Befehl eine mehrseitige PDF-Datei. Wie in meiner Frage angegeben, suche ich nach einer Methode pdftkzum Erstellen einer einseitigen PDF-Datei, die Eingabe-PDFs als Kacheln enthält.
Alex Reynolds

Kombiniere meine Antwort mit @mickes. Ich habe nicht geprüft, ob pdfnup Namen mit Platzhalterzeichen (* .pdf) als Argument verwenden kann, aber Sie können von pdftk generierte PDF-Dateien verwenden. Überprüfen Sie pdfnupoder pdfjammit --nupOption.
Szemek

Wenn Sie sie nicht zitieren, werden Platzhalter wie *durch die von Ihnen verwendete Shell erweitert. pdfnupwird nie angezeigt *.pdf, stattdessen wird eine Liste aller Dateien im Arbeitsverzeichnis mit den Dateinamen angezeigt, die auf enden .pdf.
Übelsuppe

0

Wenn Sie eine große Anzahl von PDFs in einer Ordnerstruktur haben und eine TeX-Installation haben, fügt dieses Skript alle PDFs rekursiv in eine große Datei ein:

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

Ich habe diesen Code nicht geschrieben, er stammt aus einer Diskussion hier: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

Es ist sehr nützlich. Ich habe einige deutsche Kommentare ins Englische übersetzt.

Grüße, Alexander



-1
  1. Speichern Sie die gewünschten Seiten in einem PDF-Dokument mit Acrobat Pro.

  2. Drucken Sie das Dokument mit mehreren Seiten zu einer Seitenfunktion, zurück zu einem PDF-Dokument.

Mehrere Seiten auf eine Seite. :-)


Ich sehe, dass Ihre Antwort kommentarlos abgelehnt wurde. Das ist nicht cool, aber es gibt sicherlich Möglichkeiten, Ihre Antwort zu verbessern. Verbessern Sie die Grammatik, fügen Sie oben eine Beschreibung hinzu, warum Sie dies tun usw.

upvoted diese Antwort - nur weil downvotes ohne Kommentar nicht cool sind IMO!
Jeremy Davis

1
Abgestimmt, weil im Betreff "mit pdftk" steht. Ihre Antwort ist vielleicht kein Thema, aber eindeutig nicht das, wonach der Fragesteller sucht.
Nik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.