Birden fazla PDF dosyasını pdftk ile bir sayfaya nasıl birleştirebilirim?


35

Ben PDF dosyaları bir dizi var 1.pdf, 2.pdfben bir sayfada kiremitli tüm PDF'leri ile bir dosya içine birleştirmek istiyorum, vb.

Şu anda pdftkbu dosyaları birleştirmeyi denedim , ancak ayrı sayfalara yerleştirildiler:

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

Tek tek PDF dosyalarını tek bir ana sayfaya döşemenin bir yolu var mı merged.pdf?


1
Bir GUI uygulamasının kullanılmasının tamam olduğu durumlarda pdfsam.org
reinierpost

1
Kabul etmek için bir cevap buldunuz mu?
Léo Léopold Hertz 준영

Bu bağlantı: verypdf.com/wordpress/201302/… VeryPDF PDF Stitcher'ın işi dikey veya yanlara yapabildiğini gösteriyor. İndirme: verypdf.com/app/pdf-stitch/index.html
Zimba

Yanıtlar:


29

Bunu bugün test ettim:

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

Bir sayfaya 2 sayfa koyar.


pencere altında da çalışır ( wsl ile )sudo apt-get install pdfjam
jan-glx

4
sayfaları dikey olarak yapıştırmak istiyorsanız, kullanın--nup 1x2 --no-landscape
jan-glx

Sayfaların otomatik ölçeklendirilmesini istemiyorsanız (maden varsayılan olarak a4 değerini doldurmak için çıktıyı uzatır),--noautoscale true
Jonathan Y.

1
Soru pdftk hakkında soruyor, pdfjam değil. Bu soruya cevap vermiyor; alternatif bulmak için bir öneri
Zimba

6

PdfLaTeX tabanlı pdfnup sizin için işe yarayabilir. Çok sayıda pdf dosyanız varsa, uzun bir pdfjam borusu hazırlamanız veya birkaç kez çalıştırmanız gerekebilir.

Ayrıca python içinde pdfnup var .


4

Ne demek istediğinden emin değilim tiled on one page. Bir sayfada birden çok PDF'yi bir başkasının üstüne koymanın bir yolunu arıyordum. Bu böyle yapılabilir pdftk:

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


3

Bu komut dosyası sizin için pdf sayfalarını döşeyecektir. Dilimi sayfa başına ihtiyacınız olanla değiştirin.

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

Dosya adları "sisteme özel" sırayla ise, o zaman pdftk *.pdf cat output merged.pdfgayet iyi çalışması gerekir.

Burada "sisteme özel" sıralama ile ne kastediyorum.

Örnek:
Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf dosyamdan 3 dosya aldım.
Dosyalar sırayla birleştirildi: 10.pdf 1.pdf 2.pdf (birleştirilmiş dosyadaki sıranın aynısı ls -ldöndü)

En güvenli adlandırma kuralı: 0001.pdf, 0002.pdf, vb.


1
Dediğim gibi, bu komut çok sayfalı bir PDF oluşturur. Sorumu belirttiğim pdftkgibi, fayans olarak giriş PDF'lerini içeren tek sayfalık bir PDF yapmak için kullanmanın yöntemini arıyorum .
Alex Reynolds

Cevabımı @ micke's ile birleştir. Pdfnup'in joker karakterle (* .pdf) argüman olarak isim alıp almadığını kontrol etmedim, ancak pdftk tarafından oluşturulan pdf'yi kullanabilirsiniz. Seçeneği pdfnupveya pdfjamile kontrol edin --nup.
49'da

Onları alıntılamadığınız sürece, joker karakterler *kullandığınız kabuk tarafından genişletilir. pdfnuphiç görmüyor *.pdf, bunun yerine çalışma dizinindeki her dosyanın bir listesini biten dosya isimleriyle görüyor .pdf.
evilsoup

0

Tek bir klasör yapısında çok sayıda PDF'niz varsa ve bir TeX Kurulumunuz varsa, bu komut tüm PDF'leri tekrar tekrar büyük bir dosyaya koyar :

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

Bu kodu yazmadım, burada bir tartışmadan aldım: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

Çok faydalı. Bazı almanca yorumları ingilizceye çevirdim.

Saygılar, Alexander



-1
  1. Acrobat Pro gibi bir pdf belgesinde istediğiniz sayfaları kaydedin.

  2. Birden çok sayfayı bir sayfa özelliğine, pdf belgesine geri kullanarak belgeyi yazdırın.

Tek sayfaya birden fazla sayfa. :-)


Cevabınız yorum yapmadan indirildi. Bu iyi değil, ama cevabınızı iyileştirmenin kesinlikle yolları var. Dilbilgisini geliştirin, bunu neden yaptığınızla ilgili bir açıklama ekleyin, vb.

bu yanıtı geçersiz kıldı - yalnızca yorum yapmayan aşırı oyların IMO'nun hoş olmadığı için!
Jeremy Davis,

1
Downvoted çünkü konu "pdftk ile" diyor. Cevabınız belki konu dışı olabilir, ama açıkça sorgulayıcının aradığı şey değil.
Nik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.