Comment fusionner plusieurs fichiers PDF sur une seule page avec pdftk?

35

J'ai une série de fichiers PDF 1.pdf, 2.pdfetc. que je voudrais fusionner en un seul fichier, tous les fichiers PDF en mosaïque sur une page.

Actuellement, j'ai essayé pdftkde fusionner ces fichiers, mais ils sont placés sur des pages séparées:

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

Existe-t-il un moyen de placer les fichiers PDF individuels en mosaïque dans une page maître merged.pdf?

Alex Reynolds
la source
1
Dans les cas où l'utilisation d'une application graphique est correcte, une bonne alternative est pdfsam.org
reinierpost le
1
Avez-vous trouvé une réponse à accepter?
Léo Léopold Hertz
Ce lien: verypdf.com/wordpress/201302/… montre que VeryPDF PDF Stitcher peut faire le travail verticalement ou latéralement. Télécharger à: verypdf.com/app/pdf-stitch/index.html
Zimba

Réponses:

29

J'ai testé cela aujourd'hui:

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

Il met 2 pages sur une page.

Ole Tange
la source
fonctionne aussi sous les fenêtres (avec wsl )sudo apt-get install pdfjam
jan-glx
4
si vous voulez coller des pages verticalement, utilisez--nup 1x2 --no-landscape
jan-glx
Si vous ne vouliez pas redimensionner automatiquement les pages (le mien étire la sortie pour remplir a4 par défaut), utilisez--noautoscale true
Jonathan Y.
1
La question concerne pdftk, pas pdfjam. Cela ne répond pas à la question. c'est une suggestion pour trouver une alternative
Zimba
6

Le pdfnup basé sur pdfLaTeX pourrait fonctionner pour vous. Si vous avez beaucoup de fichiers pdf, vous devrez peut-être créer un long tuyau de pdfjam ou l'exécuter plusieurs fois.

Il y a aussi pdfnup en python .

micke
la source
4

Vous ne savez pas ce que vous voulez dire par tiled on one page. Je cherchais un moyen de fusionner plusieurs fichiers PDF sur une page - sur une autre. Cela peut être fait avec pdftkcomme ceci:

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

Nik
la source
3

Ce script tuile les pages pdf pour vous. Modifiez la tranche en fonction de ce dont vous avez besoin par page.

#!/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
anonyme
la source
1

vous pouvez utiliser le montage de ImageMagick

$ montage *.pdf merged.pdf

voir aussi http://www.imagemagick.org/script/montage.php

Cesco
la source
13
Le montage ImageMagick ne gère pas correctement les images vectorisées et les polices. En conséquence, la sortie de la commande de montage peut paraître floue. Voir aussi l'explication ici: superuser.com/a/479767/149568
Benedikt Köppel
1
Cela ne répond PAS à la question qui concerne pdftk
Zimba
0

Si les noms de fichiers sont dans l'ordre "spécifique au système", alors cela pdftk *.pdf cat output merged.pdfdevrait fonctionner correctement.

Voici ce que je veux dire par ordre "spécifique au système".

Exemple:
J'ai 3 fichiers sur mon Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf. Les
fichiers sont fusionnés dans l'ordre: 10.pdf 1.pdf 2.pdf (a ls -lrenvoyé le même ordre que dans le fichier fusionné).

Convention de nommage la plus sûre: 0001.pdf, 0002.pdf, etc.

szemek
la source
1
Comme je l'ai dit, cette commande crée un fichier PDF de plusieurs pages. Comme indiqué dans ma question, je recherche la méthode à suivre pdftkpour créer un fichier PDF d'une page contenant des PDF d'entrée en tant que mosaïques.
Alex Reynolds
Combinez ma réponse avec @ micke. Je n'ai pas vérifié si pdfnup peut prendre le nom avec un caractère générique (* .pdf) comme argument, mais vous pouvez utiliser le pdf généré par pdftk. Vérifier pdfnupou pdfjamavec --nupoption.
Szemek
Sauf si vous les citez, les caractères génériques comme ceux-ci *sont développés par le shell que vous utilisez. pdfnupne voit jamais *.pdf, mais une liste de tous les fichiers du répertoire de travail avec les noms de fichiers se terminant par .pdf.
Evilsoup
0

Si vous avez un grand nombre de fichiers PDF dans une structure de dossiers et que vous avez une installation TeX, ce script place tous les fichiers PDF de manière récursive dans un seul fichier volumineux:

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

Je n'ai pas écrit ce code, je l'ai tiré d'une discussion ici: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

C'est très utile. J'ai traduit des commentaires en allemand en anglais.

Cordialement, Alexander

Keks Dose
la source
-1
  1. Enregistrez les pages voulues dans un document PDF avec quelque chose comme Acrobat Pro.

  2. Imprimez le document en utilisant plusieurs pages sur une fonction de page, puis sur un document pdf.

Plusieurs pages sur une seule page. :-)

Malcolm
la source
Je vois que votre réponse est votée sans commentaire. Ce n'est pas cool, mais il existe certainement des moyens d'améliorer votre réponse. Améliorez sa grammaire, ajoutez une description en haut de la raison pour laquelle vous le faites, etc.
upvoted cette réponse - seulement parce que les votes négatifs sans commentaire ne sont pas cool IMO!
Jeremy Davis
1
Moins voté parce que le sujet dit "avec pdftk". Votre réponse est peut-être pas hors sujet, mais clairement pas ce que le questionneur recherche.
Nik