Как объединить несколько файлов PDF на одной странице с pdftk?
У меня есть ряд файлов PDF 1.pdf
, 2.pdf
и т. д., которые я хотел бы объединить в один файл со всеми PDF-файлами на одной странице.
В настоящее время я пытался pdftk
объединить эти файлы, но они размещены на отдельных страницах:
pdftk 1.pdf 2.pdf ... cat output merged.pdf
Можно ли вместо этого сгруппировать отдельные файлы PDF в одну главную страницу на merged.pdf
?
10 ответов
Я проверял это сегодня:
pdfjam Page1.pdf Page2.pdf --nup 2x1 --landscape --outfile Page1+2.pdf
Это помещает 2 страницы на одну страницу.
Не уверен, что вы подразумеваете под tiled on one page
, Я искал способ объединить несколько PDF-файлов на одной странице - поверх другой. Это может быть сделано с pdftk
как это:
pdftk foreground.pdf background background.pdf output merged.pdf
Pdfnup на основе pdfLaTeX может работать для вас. Если у вас много pdf-файлов, вам может понадобиться создать длинный канал pdfjam или запустить его несколько раз.
Существует также pdfnup в Python.
Вы можете использовать монтаж из ImageMagick
$ montage *.pdf merged.pdf
Этот скрипт будет отображать страницы 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
Если у вас есть большое количество PDF-файлов в одной структуре папок, и у вас есть TeX-Installation, этот скрипт рекурсивно помещает все 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-d-l&T=0&P=10771
Это очень полезно. Я перевел некоторые немецкие комментарии на английский.
С уважением, Александр
Если имена файлов расположены в "системном" порядке, то 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 и т. Д.
Эта ссылка: http://www.verypdf.com/wordpress/201302/how-to-combine-4-page-pdf-into-1-page-pdf-file-to-save-ink-and-papers-34505.html показывает, что VeryPDF PDF Stitcher может выполнять работу вертикально или сбоку. Скачать по адресу: http://www.verypdf.com/app/pdf-stitch/index.html
Сохраняйте нужные страницы в PDF-документ с помощью чего-то вроде Acrobat Pro.
Распечатайте документ, используя несколько страниц, для функции страницы, обратно в документ PDF.
Несколько страниц на одной странице.:-)
Извините, что не ответил на ваш конкретный вопрос о pdftk, но, поскольку существуют другие ответы, показывающие альтернативы, я решил присоединиться и представить еще одну альтернативу.
В системе, в которой установлен poppler, у вас должен бытьpdfunite
программа. Использовать его просто:
pdfunite foo.pdf bar.pdf /tmp/output.pdf