PDF 파일을 병합하고 각 파일을 항목으로 포함하는 디렉터리를 자동으로 생성합니다.

PDF 파일을 병합하고 각 파일을 항목으로 포함하는 디렉터리를 자동으로 생성합니다.

chapter1.pdf여러 개의 PDF 파일 ( 등) 이 있는데 chapter2.pdf, 각 파일은 책의 한 장입니다. 이제 나는 그것들을 하나의 pdf로 병합하는 방법을 알고 있지만(나는 pdfunitepoppler의 명령을 사용합니다), 출력 파일이 크기 때문에 목록을 작성하지 않고는 장을 찾기가 어렵습니다. 그렇다면 병합된 각 장이 항목인 포함된 목차를 어떻게 생성합니까?

장 목록과 해당 페이지 번호가 포함된 출력 파일에 페이지를 만들고 싶지 않습니다. 이러한 기능을 지원하는 모든 PDF 리더(또는 전자책 장치)에서 검색할 수 있는 PDF 파일에 대한 색인/카탈로그 메타데이터를 원합니다.

답변1

비파괴적인@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"

작동 방식은 다음과 같습니다.

  1. 생성하다 bookmarks.txt.
  2. PDF를 combined.pdf.
  3. combined.pdf으로 업데이트되었습니다 bookmarks.txt.

답변2

제가 사용한 기능은 바로 이 작업을 위한 것입니다. 확장자에서 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

관련 정보