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?


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.


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 .


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


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


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.


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



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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.