Sen*_*nha 14 pdf merge poppler
我有几个 pdf 文件(chapter1.pdf
、chapter2.pdf
等),每个文件都是一本书的一章。我现在如何将它们合并为一个 pdf(我使用pdfunite
poppler 中的命令),但是由于输出文件很大,如果不将它们编入目录中,就很难找到一章。那么如何创建一个嵌入的目录,其中每个合并的章节都是一个条目?
请注意,我不想在输出文件中创建包含章节列表及其各自页码的页面。我想要一个 pdf 文件的索引/目录元数据,可以在任何支持此类功能的 pdf 阅读器(或电子书设备)中浏览。
Mat*_*haq 10
@bu5hman 答案的非破坏性版本:
#!/bin/bash
out_file="combined.pdf"
bookmarks_file="/tmp/bookmarks.txt"
bookmarks_fmt="BookmarkBegin
BookmarkTitle: %s
BookmarkLevel: 1
BookmarkPageNumber: %d
"
rm -f "$bookmarks_file" "$out_file"
declare -a files=(*.pdf)
page_counter=1
# Generate bookmarks file.
for f in "${files[@]}"; do
title="${f%.*}"
printf "$bookmarks_fmt" "$title" "$page_counter" >> "$bookmarks_file"
num_pages="$(pdftk "$f" dump_data | grep NumberOfPages | awk '{print $2}')"
page_counter=$((page_counter + num_pages))
done
# Combine PDFs and embed the generated bookmarks file.
pdftk "${files[@]}" cat output - | \
pdftk - update_info "$bookmarks_file" output "$out_file"
Run Code Online (Sandbox Code Playgroud)
它的工作原理是:
bookmarks.txt
.combined.pdf
.combined.pdf
用bookmarks.txt
。我一直使用的函数就是为了完成此任务。只需确保 pdf 在扩展中按顺序正确排序即可。
tp="/tmp/tmp.pdf"
td="/tmp/data"
for i in *.pdf; do
echo "Bookmarking $i"
printf "BookmarkBegin\nBookmarkTitle: %s\nBookmarkLevel: 1\nBookmarkPageNumber: 1\n" "${i%.*}"> "$td"
pdftk "$i" update_info "$td" output "$tp"
mv "$tp" "$i"
done
pdftk *.pdf cat output myBook.pdf
Run Code Online (Sandbox Code Playgroud)