91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用python給pdf批量添加水印并加密

發布時間:2020-10-30 09:38:16 來源:億速云 閱讀:611 作者:小新 欄目:編程語言

這篇文章主要介紹了如何用python給pdf批量添加水印并加密,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

1.設置路徑

import os os.getcwd() os.chdir('E:\\python\\test\\pdf批量加水印\\')

先設置路徑,把需要加水印的相關文檔放入一個目錄下。我的目錄是:E:\python\test\pdf批量加水印

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號

如何用python給pdf批量添加水印并加密

另,希望頁面上貼四個水印,通過函數

c.drawString(-7*cm, 0*cm, content)

改變坐標重復4次便可實現。由此最終生成水印pdf文件。

如何用python給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)\Python\lib\site-packages\PyPDF2\utils.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給pdf批量添加水印并加密

如何用python給pdf批量添加水印并加密

感謝你能夠認真閱讀完這篇文章,希望小編分享如何用python給pdf批量添加水印并加密內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东至县| 南岸区| 冀州市| 平凉市| 天柱县| 遂平县| 凤阳县| 宜兰市| 茂名市| 大同市| 清远市| 应用必备| 壤塘县| 横峰县| 丰台区| 阆中市| 文安县| 济南市| 广汉市| 扶风县| 新河县| 饶阳县| 乌兰察布市| 宜黄县| 桐城市| 城步| 永靖县| 苍溪县| 于都县| 东山县| 宣城市| 应用必备| 丹棱县| 乌兰浩特市| 阜城县| 昌宁县| 宁化县| 沙坪坝区| 滦南县| 栾川县| 安平县|