web-dev-qa-db-fra.com

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

J'ai une gamme de PDF fichiers 1.pdf, 2.pdf, etc. que je souhaite fusionner en un seul fichier, avec tous les PDF en mosaïque sur une seule page.

Actuellement, j'ai essayé pdftk de 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 transformer les fichiers PDF individuels en un seul gabarit sur merged.pdf?

33
Alex Reynolds

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.

27
Ole Tange

Le pdfLaTeX basé pdfnup 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 .

6
micke

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

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

4
Nik

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
3
anonymous

vous pouvez utiliser montage à partir de ImageMagick

$ montage *.pdf merged.pdf

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

1
Cesco

Si les noms de fichiers sont dans un ordre "spécifique au système", alors pdftk *.pdf cat output merged.pdf devrait 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 (ls -l a retourné le même ordre que dans le fichier fusionné)

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

0
szemek

Si vous avez un grand nombre de PDF dans une structure de dossiers et vous avez une installation TeX, ce script place tous les PDF de manière récursive en 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 viens d'une discussion ici: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex- d-l & T = 0 & P = 10771

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

Cordialement, Alexander

0
Keks Dose