怎樣用python給pdf批次新增水印並加密
很多時候需要給pdf新增水印,而且還要加密檔案,這些在Python中是如何實現的呢?學過程式設計的小夥伴準備好迎接今天的挑戰吧。
1.設定路徑
import os os.getcwd() os.chdir('E:\python\test\pdf批次加水印\')
先設定路徑,把需要加水印的相關文件放入一個目錄下。我的目錄是:E:pythontestpdf批次加水印
os.chdir('E:\python\test\pdf批次加水印\')
2.準備水印pdf檔案
from reportlab.pdfgen import canvas from reportlab.lib.units import cm from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont pdfmetrics.registerFont(TTFont('song', 'C:/Windows/Fonts/simsun.ttc'))#宋體 from PyPDF2 import PdfFileWriter,PdfFileReader import xlrd def create_watermark(content): #預設大小為21cm*29.7cm c = canvas.Canvas('mark.pdf', pagesize = (30*cm, 30*cm)) c.translate(10*cm, 10*cm) #移動座標原點(座標系左下為(0,0))) c.setFont('song',22)#設定字型為宋體,大小22號 c.setFillColorRGB(0.5,0.5,0.5)#灰色 c.rotate(45)#旋轉45度,座標系被旋轉 c.drawString(-7*cm, 0*cm, content) c.drawString(7*cm, 0*cm, content) c.drawString(0*cm, 7*cm, content) c.drawString(0*cm, -7*cm, content) c.save()#關閉並儲存pdf檔案
系統預設識別英文作為水印,但若水印為中文會無法顯示。解決辦法是先
from reportlab.pdfbase.ttfonts import TTFont
然後找到電腦中字型路徑,如我希望找到宋體,路徑為“C:/Windows/Fonts/simsun.ttc”,命名為"song"(如下圖所示,其他字型也可任君挑選)。
應用到後續create_watermarkh函式中即可:
c.setFont('song',22)#設定字型為宋體,大小22號
另,希望頁面上貼四個水印,透過函式
c.drawString(-7*cm, 0*cm, content)
改變座標重複4次便可實現。由此最終生成水印pdf檔案。
3.準備水印pdf檔案
def add_watermark2pdf(input_pdf,output_pdf,watermark_pdf): watermark = PdfFileReader(watermark_pdf) watermark_page = watermark.getPage(0) pdf = PdfFileReader(input_pdf,strict=False) pdf_writer = PdfFileWriter() for page in range(pdf.getNumPages()): pdf_page = pdf.getPage(page) pdf_page.mergePage(watermark_page) pdf_writer.addPage(pdf_page) pdfOutputFile = open(output_pdf,'wb') pdf_writer.encrypt('scb2018')#設定pdf密碼 pdf_writer.write(pdfOutputFile) pdfOutputFile.close()
只要安裝了該安裝的模組,這一步驟基本沒有什麼問題,提醒給pdf設定密碼的語法為
.encrypt('scb2018')#設定pdf密碼
若需更改密碼,改變引號中內容即可。注:input_pdf為需要打上水印的pdf,watermark_pdf為水印pdf,output_pdf為最終輸出的pdf。
4.準備水印pdf檔案
ExcelFile = xlrd.open_workbook('商家名單.xlsx') sheet=ExcelFile.sheet_by_name('Sheet2')#開啟有商家名單那個sheet print('———————已匯入商家名單———————') col = sheet.col_values(3)#第4列內容為商家名稱 id = sheet.col_values(0)#第1列內容為ID del col[0];del id[0]#去掉標題 id2 = [str(int(i)) for i in id] merchant_as_mark_content =[(i+' ')*4 if len(i)<=5 else i for i in col]#如果名稱太短則重複4個為一行
我是放在一個excel中的,截圖入下,需要把第4列商家名稱作為水印內容印到目標pdf上,對應程式碼為
sheet.col_values(3)
5.呼叫函式最終批次生成想要的pdf
if __name__=='__main__': for i,j,k in zip(merchant_as_mark_content,,id2):#i製作水印,j檔名,k對應ID create_watermark(i)#創造了一個水印pdf:mark.pdf add_watermark2pdf('需要加水印的原始檔.pdf',k+'通知('+j+').pdf','mark.pdf') print('———————已製作好第'+k+'個pdf,正在準備下一個———————') print('———————所有檔案已轉化完畢———————')
呼叫本步驟時我遇到一個錯誤
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 8-9: ordinal not in range(256)
說什麼latin-1不能編碼字元,是個編碼問題。解決辦法:找到PyPDF2下utils.py的238行,我的路徑為:D:Program Files (x86)Pythonlibsite-packagesPyPDF2utils.py。然後把
r = s.encode('latin-1')
替換為如下程式碼即可
try: r = s.encode('latin-1') if len(s) < 2: bc[s] = r return r except Exception as e: print(s) r = s.encode('utf-8') if len(s) < 2: bc[s] = r return r
到此所有程式已梳理完畢,所遇問題已解決,大家就可以愉快的打水印了!我出來的效果
今天的內容比較複雜,沒學會的小夥伴可以再多練習幾遍。更多Python學習推薦:。
(推薦作業系統:windows7系統、Python 3.9.1,DELL G3電腦。)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2001/viewspace-2832465/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用photoshop給圖片批次加水印
- 批次圖片新增水印
- pdf程式碼新增水印
- 「Python實用祕技04」為pdf檔案批量新增文字水印Python
- SpringBoot 實現 PDF 新增水印Spring Boot
- 怎樣在報表中新增文字水印
- 用python來給圖片加水印Python
- Python影像暗水印新增Python
- Java 渲染 docx 檔案,並生成 pdf 加水印Java
- 9.23 海報+PDF水印運用
- 怎樣用Python提取資訊呢?分享這3個Python PDF庫Python
- 使用Python實現網頁中圖片的批次下載和水印新增儲存Python網頁
- 怎麼給手持裝置新增特殊樣式?
- 給你的 MuseUI 應用新增字型、樣式UI
- 怎樣用apipost自定義加密方法API加密
- PDF批次轉換器,批次轉word為pdf,批次轉ppt為pdf
- 怎樣用一行 Python 程式碼實現並行Python並行
- El-Upload元件上傳圖片並新增水印元件
- 有去除片尾並新增圖片水印的技巧嗎?
- 怎樣在Excel中新增水印?學會這個方法可以輕鬆搞定Excel
- PDF批次處理軟體batchoutput pdf啟用版BAT
- 批次影像水印新增工具Watermark Sense for Mac如何更好保護自己作品Mac
- win10怎樣加密資料夾_window10怎麼給資料夾加密Win10加密
- Java 給 Word 文件每一頁新增不同圖片水印Java
- 【Python】批量給圖片增加水印工具Python
- 如何給 GoPro 拍攝的影片新增時間水印 All In OneGo
- 一招教你批次給影片新增馬賽克
- 報表中怎麼新增動態文字水印
- Python實現批次將ppt轉換為pdfPython
- PDF批次列印工具BatchOutput PDF for MacBATMac
- 用canvas生成圖片為頁面新增水印Canvas
- Java 給PDF簽名時新增可信時間戳Java時間戳
- 加密與水印結合加密
- Node專案中用images+imageinfo庫給圖片批量新增水印
- 怎樣用python播放影片Python
- [譯] 給破碎圖片新增樣式
- 批次給大量影片新增srt字幕的簡單步驟
- Java 在Excel中新增水印(單一水印、平鋪水印)JavaExcel