Аннотирование серии PDF-документов с помощью счетчика страниц

Подобно тому, как $*вставляет символ в конкатенацию аргументов, расширение без кавычек удаляет символы из строки, и каждое удаление разбивает строку на отдельные аргументы.

$ var=1234567890
$ IFS=368
$ echo "$var" $var
1234567890 12 45 7 90
$ printf '<%s> ' "$var" $var
<1234567890> <12> <45> <7> <90>
0
13.11.2021, 02:35
1 ответ

Обновление для исправленного вопроса...

#!/bin/bash

label="$1"    #the label to be added to the footer
from=$2       #the starting number

#for each pdf in this directory
for input in *.pdf; do

  #compose an output file name
  output=${input%.*}.numbered.pdf
  
  #count the pages
  pagenum=$(pdftk "$input" dump_data | grep "NumberOfPages" | cut -d":" -f2)
  
  #calculate the last page no
  to=$(($from+$pagenum-1))
              
  (echo -e ".nr FM 0.125i\n.ds CH"; for s in $(seq -f "%05g" $from $to); do 
       echo -e ".ds RF $label $s \n.bp +1"; done) | 
       groff -ms -Tpdf | 
       pdftk "$input" multistamp - output "$output" 

  #get ready for the next file  
  from=$((to +1))
done

Составьте базовый groff -msдокумент с пустыми страницами, за исключением правого нижнего колонтитула .ds RF, содержащего нужный текст $label $s, где $s— номер страницы, который я дополнил нулями вseq -f "%05g"

Макрос

groff -msприменяет верхний колонтитул страницы, который подавляется с помощью .ds CH, а .nr FM 0.125уменьшает высоту поля нижнего колонтитула, поэтому каждая «страница» представляет собой просто нижний колонтитул с разрывом страницы.bp +1

Передача этого текста в groff -Tpdfсоздает PDF-файл, который затем передается в pdftkчерез стандартный ввод -, multistampedво входной файл и, наконец, записывается в выходной файл.

Мои извинения всем, кто действительно знает, как правильно использовать groff, если это хак... Я даже не смотрел на него до сегодняшнего дня.

1
13.11.2021, 11:21

Теги

Похожие вопросы