如何使用pdftk将多个PDF文件合并到一页上?


35

我有一系列PDF文件1.pdf2.pdf等等,我想合并为一个文件,所有PDF都平铺在一页上。

目前,我已经尝试pdftk合并这些文件,但是它们放在单独的页面上:

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

有没有一种方法可以将单个PDF文件平铺到一个母版页上merged.pdf


1
如果可以使用GUI应用程序,则可以使用pdfsam.org
reinierpost 2012年

1
您找到要接受的答案了吗?
莱奥波德·赫兹(LéoLéopoldHertz),2017年

此链接:verypdf.com/wordpress/201302/…显示VeryPDF PDF Stitcher可以垂直或横向进行这项工作。下载:verypdf.com/app/pdf-stitch/index.html
津巴

Answers:


29

我今天测试了这个:

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

它将2页放在一页上。


在Windows下也可以正常工作(使用wslsudo apt-get install pdfjam
jan-glx

4
如果您想垂直粘贴页面,请使用--nup 1x2 --no-landscape
jan-glx

如果您不希望页面自动缩放(默认情况下,我的拉伸输出将填充为a4),请使用--noautoscale true
JonathanY。18/

1
问题是询问pdftk,而不是pdfjam。这不能回答问题。这是寻找替代品的建议
Zimba


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


0

如果文件名按“系统特定”顺序,则pdftk *.pdf cat output merged.pdf应该可以正常工作。

这就是我所说的“系统特定”顺序。

示例:
我在Ubuntu 11.04上有3个文件:1.pdf,2.pdf,10.pdf
文件按顺序合并:10.pdf 1.pdf 2.pdf(ls -l返回的顺序与合并文件中的顺序相同)

最安全的命名约定:0001.pdf,0002.pdf等。


1
如前所述,此命令将创建多页PDF。如我的问题所述,我正在寻找一种pdftk用于制作一页PDF 的方法,该PDF包含输入的PDF作为图块。
亚历克斯·雷诺兹

将我的答案与@micke结合。我尚未检查pdfnup是否可以使用通配符(* .pdf)作为名称,但是您可以使用pdftk生成的pdf。选中pdfnuppdfjam带有--nup选项。
szemek 2011年

除非您引用它们,否则通配符之类*的字符会被您正在使用的shell扩展。pdfnup不会看到*.pdf,而是看到工作目录中每个文件的列表,文件名以.pdf
evilsoup

0

如果在一个文件夹结构中有大量PDF,并且已安装TeX,则此脚本会将所有PDF 递归地放入一个大文件中:

    #!/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. 使用Acrobat Pro之类的文件将所需的页面保存到pdf文档中。

  2. 使用多页到页面功能将文档打印到pdf文档。

多页到单页。:-)


我看到您的回答被否决了,没有发表评论。那不是很酷,但是肯定有一些方法可以改善您的答案。提高语法,顶端添加说明,为什么你这样做,等等

赞成这个答案-仅因为没有评论的反对不是很酷的IMO!
杰里米·戴维斯

1
投票不足,因为该主题说“ with pdftk”。您的答案可能不是主题,但显然不是提问者在寻找什么。
Nik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.