문서 취합 및 쪽번호 매기기 자동화
enscript와 pdftk로 PDF의 머릿글과 페이지 번호를 추가하기
(주의) 한글(korean) 머릿글은 지원하지 않는다
WHY?
HWP는 일괄병합 기능을 지원하지 않는다.
80개 제안서를 일일이 합치고 쪽번호를 매기는 작업은 심히 괴롭다.
PDF로 바꿔서 CLI로 작업하는게 정신건강에 이롭다.
예제 상황
4개의 제안서를 받아 평가용 책자를 만드는 예제
제안서 PDF에 평가용 코드를 헤더로 넣기 → PDF 병합 → 쪽번호 추가
파일 | 평가용 코드 (제안서별 머릿글) |
|
---|
RFP-AS-01-AAA.pdf | 2020-AS-01 | 쪽 번호 추가 |
RFP-AS-02-BBB.pdf | 2020-AS-02 |
RFP-CW-01-CCC.pdf | 2020-CW-01 |
RFP-CW-02-DDD.pdf | 2020-CW-02 |
enscript용 템플릿 추가
% -- code follows this line --
%Format: fmodstr $D{%a %b %d %H:%M:%S %Y}
%Format: pagenumstr $V$%
%HeaderHeight: 38
%FooterHeight: 15
/do_header { % print default simple header
% Footer
gsave
d_footer_x d_footer_y HFpt_h 3 div add translate
HF setfont
user_footer_p {
d_footer_x d_footer_y moveto user_footer_left_str show
d_footer_w user_footer_center_str stringwidth pop sub 2 div
0 moveto user_footer_center_str show
d_footer_x d_footer_w add user_footer_right_str stringwidth pop sub
d_footer_y moveto user_footer_right_str show
} if
grestore
% Header
gsave
d_header_x d_header_y HFpt_h 3 div add translate
HF setfont
user_header_p {
5 0 moveto user_header_left_str show
d_header_w user_header_center_str stringwidth pop sub 2 div
0 moveto user_header_center_str show
d_header_w user_header_right_str stringwidth pop sub 5 sub
0 moveto user_header_right_str show
} {
5 0 moveto fname show
45 0 rmoveto fmodstr show
45 0 rmoveto pagenumstr show
} ifelse
grestore
} def
스크립트 준비
INPUT=$1
HEADER=$2
echo IN : $INPUT
echo OUT : $HEADER.pdf
number_of_pages=$(pdftk $INPUT dump_data | grep NumberOfPages | sed 's/NumberOfPages: //g')
if [ $(($number_of_pages % 2)) -eq 1 ]; then
pdftk $INPUT a4.pdf cat output tmp.pdf
number_of_pages=$(($number_of_pages+1))
else
pdftk $INPUT output tmp.pdf
fi
echo | \
enscript -F Times-Roman20 --fancy-header=footer -L1 -b"|$HEADER|" --footer '||' -o- | \
ps2pdfwr - > stamp.pdf
pdftk tmp.pdf stamp stamp.pdf output "stamp-$INPUT"
#rm tmp.pdf stamp.pdf
INPUT=$1
OUTPUT=$(echo $1 | sed 's/.pdf$//g')-numbered.pdf
echo IN : $INPUT
echo OUT : $OUTPUT
number_of_pages=$(pdftk $IN dump_data | grep NumberOfPages | sed 's/NumberOfPages: //g')
(for i in $(seq $number_of_pages); do echo; done) | \
enscript -F Times-Roman12 --fancy-header=footer -L1 -b"||" --footer '|$%|' -o- | \
ps2pdf - > stamp.pdf
pdftk $IN multistamp stamp.pdf output $OUTPUT
#rm stamp.pdf
스크립트 실행
$ ./add-header.sh RFP-AS-01-AAA.pdf "2020-AS-01"
OUT : 2020-AS-01.pdf
$ ./add-header.sh RFP-AS-02-BBB.pdf "2020-AS-02"
OUT : 2020-AS-02.pdf
$ ./add-header.sh RFP-CW-01-CCC.pdf "2020-CW-01"
OUT : 2020-CW-01.pdf
$ ./add-header.sh RFP-AS-02-DDD.pdf "2020-CW-02"
OUT : 2020-CW-02.pdf
$ pdftk `ls 2020-AS-*.pdf |sort` cat output RFP-AS.pdf
$ pdftk `ls 2020-CW-*.pdf |sort` cat output RFP-AS.pdf
$ pdftk RFP-AS.pdf RFP-CW.pdf cat output RFP.pdf
$ ./add-pagenum.sh RFP.pdf
OUT : RFP-numbered.pdf
참고
https://anaraven.bitbucket.io/blog/2018/numbering-pages-of-a-pdf.html
https://www.maketecheasier.com/combine-multiple-pdf-files-with-pdftk/