วิธีการรวมไฟล์ PDF หลายไฟล์ไว้ในหน้าเดียวด้วย pdftk?


35

ผมมีช่วงของไฟล์แบบ PDF 1.pdf, 2.pdfฯลฯ ที่ผมอยากจะรวมเป็นหนึ่งไฟล์กับไฟล์ PDF ทั้งหมดที่ปูกระเบื้องบนหน้าหนึ่ง

ขณะนี้ฉันได้พยายามpdftkรวมไฟล์เหล่านี้แล้ว แต่มันถูกวางแยกกัน:

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

มีวิธีในการเรียงไทล์ไฟล์ PDF แต่ละไฟล์ลงในหน้าหลักเดียวmerged.pdfหรือไม่


1
ในกรณีที่การใช้แอพ GUI เป็นทางเลือกที่ดีก็คือpdfsam.org
reinierpost

1
คุณพบคำตอบที่จะยอมรับหรือไม่?
LéoLéopold Hertz 준영

ลิงค์นี้: verypdf.com/wordpress/201302/…แสดง VeryPDF PDF Stitcher สามารถทำงานในแนวตั้งหรือด้านข้าง ดาวน์โหลดได้ที่: verypdf.com/app/pdf-stitch/index.html
Zimba

คำตอบ:


29

ฉันทดสอบในวันนี้:

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

มันทำให้ 2 หน้าในหนึ่งหน้า


ผลงานภายใต้หน้าต่างเช่นกัน (กับWSL )sudo apt-get install pdfjam
Jan-GLX

4
หากคุณต้องการติดหน้ากระดาษในแนวตั้งให้ใช้--nup 1x2 --no-landscape
jan-glx

หากคุณไม่ต้องการปรับขนาดหน้าเว็บโดยอัตโนมัติ (ฉันจะขยายเอาต์พุตเพื่อเติม a4 โดยค่าเริ่มต้น) ให้ใช้--noautoscale true
Jonathan Y.

1
คำถามกำลังถามเกี่ยวกับ pdftk ไม่ใช่ pdfjam สิ่งนี้ไม่ตอบคำถาม มันเป็นข้อเสนอแนะที่จะหาทางเลือก
Zimba

6

pdfLaTeX ที่ใช้pdfnupอาจเหมาะสำหรับคุณ หากคุณมีไฟล์ PDF จำนวนมากคุณอาจต้องสร้าง pdfjam แบบยาวหรือใช้หลายครั้ง

นอกจากนี้ยังมีpdfnup ในไพธ อน


4

tiled on one pageไม่แน่ใจว่าสิ่งที่คุณหมายถึง ฉันกำลังมองหาวิธีที่จะรวม PDF หลาย ๆ ไฟล์ไว้ในหน้าเดียว สิ่งนี้สามารถทำได้pdftkดังนี้:

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


3

สคริปต์นี้จะเรียงหน้า PDF ให้คุณ เปลี่ยนชิ้นเป็นสิ่งที่คุณต้องการต่อหน้า

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

1

คุณสามารถใช้การตัดต่อจากImageMagick

$ montage *.pdf merged.pdf

ดูhttp://www.imagemagick.org/script/montage.php


13
ImageMagick การตัดต่อจะไม่จัดการภาพและแบบอักษรเวกเตอร์อย่างถูกต้อง ดังนั้นผลลัพธ์จากคำสั่ง montage อาจดูพร่ามัว ดูคำอธิบายเพิ่มเติมได้ที่นี่: superuser.com/a/479767/149568
Benedikt Köppel

1
นี่ไม่ได้ตอบคำถามที่ถามเกี่ยวกับ pdftk
Zimba

0

หากชื่อไฟล์อยู่ในคำสั่ง "เฉพาะระบบ" คุณpdftk *.pdf cat output merged.pdfควรจะทำงานได้ตามปกติ

นี่คือสิ่งที่ฉันหมายถึงโดยคำสั่ง "เฉพาะระบบ"

ตัวอย่าง:
ฉันมีไฟล์ 3 ไฟล์บน Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf
ไฟล์จะถูกรวมตามลำดับ: 10.pdf 1.pdf 2.pdf ( ls -lคืนคำสั่งเดียวกับไฟล์ที่ผสาน)

แบบแผนการตั้งชื่อที่ปลอดภัยที่สุด: 0001.pdf, 0002.pdf ฯลฯ


1
ดังที่ฉันได้กล่าวไว้คำสั่งนี้สร้าง PDF หลายหน้า ตามที่ระบุไว้ในคำถามของฉันฉันกำลังมองหาวิธีการใช้pdftkในการสร้าง PDF แบบหน้าเดียวที่มีไฟล์ PDF ที่ป้อนเป็นแบบเรียงต่อกัน
Alex Reynolds

รวมคำตอบของฉันกับ @ micke ฉันไม่ได้ตรวจสอบว่า pdfnup สามารถใช้ชื่อด้วย wildcard (* .pdf) เป็นอาร์กิวเมนต์ได้หรือไม่ แต่คุณสามารถใช้ pdf ที่สร้างโดย pdftk ได้ ตรวจสอบpdfnupหรือpdfjamด้วย--nupตัวเลือก
szemek

หากคุณไม่พูดถึงมันไวด์การ์ด*จะขยายโดยเชลล์ที่คุณใช้ pdfnupไม่เคยเห็น*.pdfแต่จะเห็นรายการของทุกไฟล์ในไดเรกทอรีการทำงานที่มีชื่อไฟล์ที่ลงท้าย.pdfด้วย
evilsoup

0

หากคุณมีเป็นจำนวนมากของไฟล์ PDF ในหนึ่ง Folderstructure, และคุณได้มีเท็กซ์ติดตั้งสคริปต์นี้ทำให้ไฟล์ PDF ทั้งหมดrecursivlyเป็นไฟล์ขนาดใหญ่หนึ่ง:

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

ฉันยังไม่ได้เขียนรหัสนั้นฉันได้รับจากการสนทนาที่นี่: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

มันมีประโยชน์มาก ฉันแปลความคิดเห็นเยอรมันเป็นภาษาอังกฤษแล้ว

ขอแสดงความนับถืออเล็กซานเด



-1
  1. บันทึกหน้าเว็บที่ต้องการลงในเอกสาร pdf ด้วย Acrobat Pro

  2. พิมพ์เอกสารโดยใช้คุณสมบัติหลายหน้าไปยังหน้าเอกสารกลับไปที่เอกสาร pdf

หลายหน้าเป็นหน้าเดียว :-)


ฉันเห็นคำตอบของคุณถูกลดระดับลงโดยไม่มีความคิดเห็น นั่นไม่เจ๋ง แต่มีวิธีการปรับปรุงคำตอบของคุณอย่างแน่นอน ปรับปรุงไวยากรณ์เพิ่มคำอธิบายไปด้านบนว่าทำไมคุณถึงทำเช่นนี้ ฯลฯ

อัปเกรดคำตอบนี้ - เพียงเพราะ downvotes ที่ไม่มีความคิดเห็นนั้นไม่เจ๋ง IMO!
Jeremy Davis

1
ลดลงเนื่องจากเรื่องแจ้งว่า "with pdftk" คำตอบของคุณอาจไม่ได้อยู่นอกหัวข้อ แต่ไม่ชัดเจนว่าผู้ถามกำลังค้นหาอะไร
Nik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.