Como mesclar vários arquivos PDF em uma página com o pdftk?

35

Eu tenho uma série de arquivos PDF 1.pdf, 2.pdfetc., que eu gostaria de mesclar em um arquivo, com todos os PDFs de azulejos em uma página.

Atualmente, tentei pdftkmesclar esses arquivos, mas eles são colocados em páginas separadas:

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

Existe uma maneira de agrupar os arquivos PDF individuais em uma página mestre merged.pdf?

Alex Reynolds
fonte
1
Nos casos em que, usando um aplicativo GUI é OK, uma boa alternativa é pdfsam.org
reinierpost
1
Você encontrou alguma resposta para aceitar?
Léo Léopold Hertz # 20/17
Este link: verypdf.com/wordpress/201302/… mostra o VeryPDF PDF Stitcher pode fazer o trabalho na vertical ou na lateral. Faça o download em: verypdf.com/app/pdf-stitch/index.html
Zimba

Respostas:

29

Eu testei isso hoje:

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

Coloca 2 páginas em uma página.

Ole Tange
fonte
funciona no Windows, bem como (com WSL )sudo apt-get install pdfjam
jan-GLX
4
se você quisesse páginas cola verticalmente, uso--nup 1x2 --no-landscape
jan-glx
Se você não queria auto-scaling de páginas (o meu estende saída para a4 preenchimento por padrão), o uso--noautoscale true
Jonathan Y.
1
A questão é perguntar sobre o pdftk, não o pdfjam. Isso não responde à pergunta; é uma sugestão para encontrar uma alternativa
Zimba
6

O pdfnup baseado em pdfLaTeX pode funcionar para você. Se você possui muitos arquivos pdf, pode ser necessário fazer um longo pipe de pdfjam ou executá-lo várias vezes.

Há também pdfnup em python .

micke
fonte
4

Não sei o que você quer dizer com tiled on one page. Eu estava procurando uma maneira de mesclar vários PDFs em uma página - em cima de outra. Isso pode ser feito pdftkassim:

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

Nik
fonte
3

Esse script exibirá as páginas em pdf para você. Altere a fatia para o que você precisa por página.

#!/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
anônimo
fonte
1

você pode usar a montagem do ImageMagick

$ montage *.pdf merged.pdf

veja também http://www.imagemagick.org/script/montage.php

Cesco
fonte
13
A montagem do ImageMagick não manipula imagens e fontes vetorizadas corretamente. Como resultado, a saída do comando montage pode parecer embaçada. Veja também a explicação aqui: superuser.com/a/479767/149568
Benedikt Köppel
1
Isso NÃO responde à pergunta, que está perguntando sobre o pdftk
Zimba
0

Se os nomes de arquivos estiverem na ordem "específica do sistema", pdftk *.pdf cat output merged.pdfdeverá funcionar perfeitamente.

Aqui está o que quero dizer com ordem "específica do sistema".

Exemplo:
Eu tenho 3 arquivos no meu Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf Os
arquivos são mesclados na ordem: 10.pdf 1.pdf 2.pdf ( ls -lretornou a mesma ordem que no arquivo mesclado)

Convenção de nomenclatura mais segura: 0001.pdf, 0002.pdf etc.

szemek
fonte
1
Como afirmei, este comando cria um PDF de várias páginas. Conforme indicado na minha pergunta, estou procurando o método de uso pdftkpara criar um PDF de uma página que contenha PDFs de entrada como blocos.
Re: Reynolds #
Combine minha resposta com a @ micke's. Não verifiquei se o pdfnup pode ter o nome com curinga (* .pdf) como argumento, mas você pode usar o pdf gerado pelo pdftk. Marque pdfnupou pdfjamcom --nupopção.
Decreto
A menos que você os cite, os curingas *são expandidos pelo shell que você está usando. pdfnupnunca vê *.pdf, em vez disso, vê uma lista de todos os arquivos no diretório ativo com nomes de arquivos terminados em .pdf.
evilsoup
0

Se você possui um grande número de PDFs em uma estrutura de pastas e uma instalação TeX, esse script coloca todos os PDFs recursivamente em um arquivo grande:

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

Não escrevi esse código, obtive-o de uma discussão aqui: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

É muito útil. Traduzi alguns comentários em alemão para o inglês.

Atenciosamente, Alexander

Keks Dose
fonte
-1
  1. Salve as páginas desejadas em um documento PDF com algo como o Acrobat Pro.

  2. Imprima documento usando as várias páginas em um recurso de página, de volta a um documento em pdf.

Várias páginas em uma única página. :-)

Malcolm
fonte
Vejo que sua resposta foi votada sem comentários. Isso não é legal, mas certamente existem maneiras de melhorar sua resposta. Melhorar a sua gramática, adicionar uma descrição ao topo a respeito de porque você está fazendo isso, etc.
votou positivamente nesta resposta - apenas porque votos negativos sem um comentário não são legais IMO!
Jeremy Davis
1
Voto negativo porque o assunto diz "com pdftk". Sua resposta talvez não esteja fora do tópico, mas claramente não é o que o interlocutor está procurando.
Nik