summaryrefslogtreecommitdiff
path: root/pkgs/scripts/merge-pdfs.nix
blob: cb7d6781547adcac2901b42ebe24b984f74faefd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
  writeShellScriptBin,
  pdftk,
  ...
}:
writeShellScriptBin "merge-pdfs" ''
  set -e
  export PATH="$PATH:${pdftk}/bin"

  if [ $# -lt 3 ]; then
    echo "Usage: $0 <output> <PDFs...>" >&2
    exit 1
  fi

  OUTPUT="$1"
  shift

  WORKDIR="$HOME/vtmp/merge-pdfs.$$"
  BOOKMARKS="$WORKDIR/bookmarks.txt"
  FMT="BookmarkBegin
  BookmarkTitle: %s
  BookmarkLevel: 1
  BookmarkPageNumber: 1
  "

  mkdir "$WORKDIR"

  N=0
  for SOURCE in "$@"; do
    BASE="$(basename "$SOURCE")"
    printf "$FMT" "''${BASE%.*}" >"$BOOKMARKS"
    pdftk "$SOURCE" update_info "$BOOKMARKS" output "$WORKDIR/"$(printf "%04d" $N).pdf
    N=$((N+1))
  done

  pdftk "$WORKDIR"/*.pdf cat output "$OUTPUT"
  rm -r "$WORKDIR"
''