Làm cách nào để hợp nhất nhiều tệp PDF vào một trang với pdftk?


35

Tôi có một loạt các tập tin PDF 1.pdf, 2.pdfvv mà tôi muốn sáp nhập vào một tập tin, với tất cả các file PDF lát gạch trên một trang.

Hiện tại, tôi đã cố gắng pdftkhợp nhất các tệp này, nhưng chúng được đặt trên các trang riêng biệt:

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

Thay vào đó, có cách nào để xếp các tệp PDF riêng lẻ vào một trang chính merged.pdfkhông?


1
Trong trường hợp sử dụng một ứng dụng GUI được OK, một lựa chọn tốt là pdfsam.org
reinierpost

1
Bạn đã tìm thấy bất kỳ câu trả lời để chấp nhận?
Léo Léopold Hertz 준영 20/03/2017

Liên kết này: Verypdf.com/wordpress/201302/ cho thấy VeryPDF PDF Stitcher có thể thực hiện công việc theo chiều dọc hoặc đi ngang. Tải xuống tại: Verypdf.com/app/pdf-stitch/index.html
Zimba

Câu trả lời:


29

Tôi đã thử nghiệm điều này ngày hôm nay:

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

Nó đặt 2 trang trên một trang.


cũng hoạt động dưới cửa sổ (với wsl )sudo apt-get install pdfjam
jan-glx

4
nếu bạn muốn dán các trang theo chiều dọc, hãy sử dụng--nup 1x2 --no-landscape
jan-glx

Nếu bạn không muốn tự động mở rộng trang (khai thác đầu ra để điền a4 theo mặc định), hãy sử dụng--noautoscale true
Jonathan Y.

1
Câu hỏi là hỏi về pdftk, không phải pdfjam. Điều này không trả lời câu hỏi; đó là một gợi ý để tìm một giải pháp thay thế
Zimba

6

Pdfnup dựa trên pdfLaTeX có thể phù hợp với bạn. Nếu bạn có nhiều tệp pdf, bạn có thể cần tạo một ống pdfjam dài hoặc chạy nó nhiều lần.

Ngoài ra còn có pdfnup trong python .


4

Không chắc chắn những gì bạn có nghĩa là tiled on one page. Tôi đang tìm cách hợp nhất nhiều tệp PDF trên một trang - trên đầu trang khác. Điều này có thể được thực hiện với pdftknhư thế này:

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


3

Kịch bản này sẽ xếp các trang pdf cho bạn. Thay đổi lát cắt thành những gì bạn cần trên mỗi trang.

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

bạn có thể sử dụng dựng phim từ ImageMagick

$ montage *.pdf merged.pdf

xem thêm http://www.imagemagick.org/script/montage.php


13
Việc dựng phim ImageMagick sẽ không xử lý đúng các hình ảnh và phông chữ được vector hóa. Do đó, đầu ra từ lệnh montage có thể bị mờ. Xem thêm giải thích tại đây: superuser.com/a/479767/149568
Benedikt Köppel

1
Điều này KHÔNG trả lời câu hỏi, đó là hỏi về pdftk
Zimba

0

Nếu tên tệp theo thứ tự "hệ thống cụ thể", thì nó pdftk *.pdf cat output merged.pdfsẽ hoạt động tốt.

Dưới đây là những gì tôi có nghĩa là theo thứ tự "hệ thống cụ thể".

Ví dụ:
Tôi đã có 3 tệp trên Ubuntu 11.04: 1.pdf, 2.pdf, 10.pdf Các
tệp được hợp nhất theo thứ tự: 10.pdf 1.pdf 2.pdf ( ls -ltrả về cùng thứ tự như trong tệp đã hợp nhất)

Quy ước đặt tên an toàn nhất: 0001.pdf, 0002.pdf, v.v.


1
Như tôi đã nói, lệnh này tạo ra một tệp PDF nhiều trang. Như đã nêu trong câu hỏi của tôi, tôi đang tìm kiếm phương pháp sử dụng pdftkđể tạo một tệp PDF một trang có chứa các tệp PDF đầu vào dưới dạng các ô xếp.
Alex Reynold

Kết hợp câu trả lời của tôi với @ micke's. Tôi chưa kiểm tra xem pdfnup có thể lấy tên bằng ký tự đại diện (* .pdf) làm đối số hay không, nhưng bạn có thể sử dụng pdf được tạo bởi pdftk. Kiểm tra pdfnuphoặc pdfjamvới --nuptùy chọn.
szemek

Trừ khi bạn trích dẫn chúng, các ký tự đại diện như *được mở rộng bởi trình bao bạn đang sử dụng. pdfnupkhông bao giờ nhìn thấy *.pdf, thay vào đó nó nhìn thấy một danh sách của mỗi tệp trong thư mục làm việc với tên tệp kết thúc bằng .pdf.
evilsoup

0

Nếu bạn đã có một số lượng lớn tệp PDF trong một cấu trúc thư mục bạn đã có Cài đặt TeX, tập lệnh này sẽ đặt tất cả các tệp PDF một cách đệ quy vào một tệp lớn:

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

Tôi chưa viết mã đó, tôi đã nhận được nó từ một cuộc thảo luận ở đây: http://www.listserv.dfn.de/cgi-bin/wa?A2=ind1201&L=tex-dl&T=0&P=10771

Nó rất hữu ích. Tôi đã dịch một số bình luận tiếng Đức sang tiếng Anh.

Trân trọng, Alexander



-1
  1. Lưu các trang muốn vào một tài liệu pdf với một cái gì đó như Acrobat Pro.

  2. In tài liệu bằng cách sử dụng nhiều trang cho một tính năng trang, trở lại tài liệu pdf.

Nhiều trang đến một trang. :-)


Tôi thấy câu trả lời của bạn bị hạ thấp mà không có bình luận. Điều đó không tuyệt, nhưng chắc chắn có nhiều cách để cải thiện câu trả lời của bạn. Cải thiện ngữ pháp của nó, thêm một mô tả lên hàng đầu về lý do tại sao bạn làm điều này, v.v.

nâng cấp câu trả lời này - chỉ bởi vì downvote không có bình luận không tuyệt vời IMO!
Jeremy Davis

1
Bị bỏ rơi vì chủ đề nói "với pdftk". Câu trả lời của bạn có thể không lạc đề, nhưng rõ ràng không phải là những gì người hỏi đang tìm kiếm.
Nik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.