from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.lib.units import cm
from reportlab.pdfgen import canvas
# 創建文字pdf
def create_watermark(content):
# 默認大小爲21cm*29.7cm
c = canvas.Canvas("mark.pdf", pagesize=(30 * cm, 30 * cm))
# 移動座標原點(座標系左下爲(0,0))
c.translate(10 * cm, 5 * cm)
# 設置字體
c.setFont("Helvetica", 80)
# 指定描邊的顏色
c.setStrokeColorRGB(0, 1, 0)
# 指定填充顏色
c.setFillColorRGB(0, 1, 0)
# 畫一個矩形
c.rect(cm, cm, 7 * cm, 17 * cm, fill=1)
# 旋轉45度,座標系被旋轉
c.rotate(45)
# 指定填充顏色
c.setFillColorRGB(0.6, 0, 0)
# 設置透明度,1爲不透明
c.setFillAlpha(0.3)
# 畫幾個文本,注意座標系旋轉的影響
c.drawString(3 * cm, 0 * cm, content)
c.setFillAlpha(0.6)
c.drawString(6 * cm, 3 * cm, content)
c.setFillAlpha(1)
c.drawString(9 * cm, 6 * cm, content)
# 關閉並保存pdf文件
c.save()
# create_watermark('walker')
# 製作圖片水印pdf
def create_watermark(f_jpg, f_pdf):
w_pdf = 20 * cm
h_pdf = 25 * cm
c = canvas.Canvas(f_pdf, pagesize=(w_pdf, h_pdf))
c.setFillAlpha(0.5) # 設置透明度
# 這裏的單位是物理尺寸
print(c.drawImage(f_jpg, 12 * cm, 17 * cm, 6 * cm, 6 * cm))
c.save()
# 所有路徑爲絕對路徑
def add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):
pdf_output = PdfFileWriter()
pdf_input = PdfFileReader(open(pdf_file_in, 'rb'))
# PDF文件被加密了
if pdf_input.getIsEncrypted():
print('該PDF文件被加密了.')
# 嘗試用空密碼解密
try:
pdf_input.decrypt('')
except Exception as e:
print('嘗試用空密碼解密失敗.')
return False
else:
print('用空密碼解密成功.')
# 獲取PDF文件的頁數
pageNum = pdf_input.getNumPages()
# 讀入水印pdf文件
pdf_watermark = PdfFileReader(open(pdf_file_mark, 'rb'))
# 給每一頁打水印
for i in range(pageNum):
page = pdf_input.getPage(i)
page.mergePage(pdf_watermark.getPage(0))
page.compressContentStreams() # 壓縮內容
pdf_output.addPage(page)
print("第{}頁".format(i))
with open(pdf_file_out, 'wb') as out:
pdf_output.write(out)
if __name__ == '__main__':
f_pdf = "mark.pdf"
create_watermark('b.jpg', f_pdf)
add_watermark("a.pdf", f_pdf, "c.pdf")