Python添加pdf水印
生活随笔
收集整理的這篇文章主要介紹了
Python添加pdf水印
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0、用到兩個擴展模塊:ReportLab、PyPDF2。
1、創建水印PDF。
1)、創建文字水印pdf文件
代碼:
| 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 | #encoding=utf-8 #author:?walker #date:?2014-03-17 #function:?創建文字水印pdf from?reportlab.pdfgen?import?canvas from?reportlab.lib.units?import?cm 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') |
效果圖:
2)、創建圖片水印pdf。
代碼:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #encoding=utf-8 #author:?walker #date:?2014-03-17 #function:?創建圖片水印pdf from?reportlab.pdfgen?import?canvas from?reportlab.lib.units?import?cm def?create_watermark(f_jpg): ????f_pdf?=?'mark.pdf' ????w_pdf?=?20*cm ????h_pdf?=?20*cm ??????????????????????????????????????????????????????????????????????????????????????????? ????c?=?canvas.Canvas(f_pdf,?pagesize?=?(w_pdf,?h_pdf)) ????c.setFillAlpha(0.3)?#設置透明度 ????print?c.drawImage(f_jpg,?7*cm,?7*cm,?6*cm,?6*cm)????#這里的單位是物理尺寸 ????c.save() create_watermark('eg.png') |
效果圖:
2、添加水印。
代碼:
| 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 | #encoding=utf-8 #author:?walker #date:?2014-03-18 #function:給pdf添加水印 from?PyPDF2?import?PdfFileWriter,?PdfFileReader from?reportlab.pdfgen?import?canvas #所有路徑為絕對路徑 def?add_watermark(pdf_file_in,?pdf_file_mark,?pdf_file_out): ????pdf_output?=?PdfFileWriter() ????input_stream?=?file(pdf_file_in,?'rb') ????pdf_input?=?PdfFileReader(input_stream) ???????????????????????????????????????????????????????????????????????????????? ????#?PDF文件被加密了 ????if?pdf_input.getIsEncrypted(): ????????print?'該PDF文件被加密了.' ????????#?嘗試用空密碼解密 ????????try: ????????????pdf_input.decrypt('') ????????except?Exception,?e: ????????????print?'嘗試用空密碼解密失敗.' ????????????return?False ????????else: ????????????print?'用空密碼解密成功.' ????#?獲取PDF文件的頁數 ????pageNum?=?pdf_input.getNumPages() ????#讀入水印pdf文件 ????pdf_watermark?=?PdfFileReader(file(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) |
效果圖:
3、這種方式唯一的缺點就是效率極低,不適合大批量文件處理。用PDFlib處理效率會比這種方式高幾十倍。可參考:用PDFlib給PDF添加水印(Python)
***?walker?***
本文轉自walker snapshot博客51CTO博客,原文鏈接http://blog.51cto.com/walkerqt/1378142如需轉載請自行聯系原作者
RQSLT
總結
以上是生活随笔為你收集整理的Python添加pdf水印的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自信的真正含义--NLP
- 下一篇: Redux 源码解析系列(一) -- R