Intro
pdf 문서에 도장 및 워터마크 와 같은 이미지를 삽입할 수 있는 python 예제입니다.
패키지 설치
> pip install reportlab
> pip install pypdf2
예제
import os
from PyPDF2 import PdfFileReader , PdfFileWriter
from reportlab.pdfgen import canvas
# 1. 이미지가 삽입 될 빈 pdf 문서를 만든다.
c = canvas . Canvas ( 'stamp.pdf' )
# 2-1. 이미지의 검은색을 투명처리 (자세한 설명은 문서 하단에 정리)
mask = [ 0 , 0 , 0 , 0 , 0 , 0 ]
# 2-2. 생성한 빈 pdf 문서에 이미지를 삽입(draw)한다. (좌표참고: 좌측하단이 0, 0)
c . drawImage ( 'heum_stamp.png' , x = 500 , y = 50 , width = 44 , height = 44 , mask = mask )
c . save ()
# 3. 방금 생성한 pdf 문서를 연다.
stamp = PdfFileReader ( open ( 'stamp.pdf' , 'rb' ))
# 4. 출력을 위한 객체 생성
output_file = PdfFileWriter ()
# 5. 이미지가 들어갈 원본 pdf 문서를 연다.
input_file = PdfFileReader ( open ( '원천징수영수증.pdf' , 'rb' ))
# 6. 원본 pdf 문서의 전체 페이지 값을 가져온다.(총 3페이지이면 3이 출력)
page_cnt = input_file . getNumPages ()
# 7. 이미지가 삽입 될 페이지 리스트 setting
insert_page = [ 1 , 3 ]
# 8. 이미지가 삽입된 빈 문서와 원본 문서를 페이지별로 merge
for page_num in range ( page_cnt ):
input_page = input_file . getPage ( page_num )
if page_num in [ num - 1 for num in insert_page ]:
print ( 'insert image page {} of {}' . format ( page_num + 1 , page_cnt ))
input_page . mergePage ( stamp . getPage ( 0 ))
output_file . addPage ( input_page )
# 9. 'out_file'을 pdf 문서로 출력
with open ( 'output_원천징수영수증.pdf' , 'wb' ) as outputStream :
output_file . write ( outputStream )
drawImage()의 ‘mask’ 파라미터 설명
'mask' 파라미터는 투명한 색상을 설정할 때 사용됩니다.
6 개 숫자로 이루어진 list가 필요합니다.
6개의 숫자는 RGB 값의 범위를 의미하며, 해당 범위안에 있는 색상은 투명하게 처리됩니다.
예를 들어 [0,2,40,42,136,139]를 사용하면
0~2는 Red의 범위, 40~42은 Green, 136~139는 Blue 범위의 픽셀을 마스크합니다.
참고로 rgb는 0-255 사이의 값으로 이루어져 있습니다.
reference
https://stackoverflow.com/questions/2925484/place-image-over-pdf
Shin, Dong-Jin
Have a nice day.
-->