python 對PDF文件加密、設置只讀、不可編輯pypdf2

問題:

想對PDF加密,設置只讀權限,讓別人不能修改我的PDF。

pypdf2的使用:https://www.jianshu.com/p/e3d384e51db9(這個是隨便搜的一篇中文的,其實它就是官方文檔翻譯了一下。)

pypdf2官方文檔:https://pythonhosted.org/PyPDF2/

 

給PDF添加水印後,如何設置只讀權限呢?

(關於PDF添加水印,可以看之前的文章:

https://blog.csdn.net/he99774/article/details/102962731

答案是:加密。

 

所以這裏用到了pypdf2的加密功能。

但是pypdf2的加密功能只能設置密碼,是不能設置對應的權限的(比如編輯、複印等權限)。

所以這裏修改了pypdf2的源代碼來簡單的實現PDF文件不可編輯。

 

具體操作如下。

1.pypdf2如下路徑,有一個pdf.py

2.修改pdy.py。找到P=-1,修改爲P=-3904

(這裏的P代表權限,-3904表示除了閱讀外,關閉其他所有權限。更多的參數設置我還沒有查,可以自行搜索。)

 

修改P後,然後正常使用pypdf2的加密函數就可以了。

加密代碼如下:

from PyPDF2 import PdfFileWriter, PdfFileReader

#給pdf批量加水印
#input_pdf = 'y8.PDF',輸入文件
#output = 'y8_q1.pdf',輸出pdf
#watermark = 's.pdf'水印文件
def create_watermark(input_pdf, output, watermark):
    watermark_obj = PdfFileReader(watermark)
    watermark_page = watermark_obj.getPage(0)
    pdf_reader = PdfFileReader(input_pdf)
    pdf_writer = PdfFileWriter()
    # 給所有頁面添加水印
    for page_num in range(pdf_reader.getNumPages()):
        print("page:",page_num)
        page = pdf_reader.getPage(page_num)
        if page_num%2 == 0:
            page.mergePage(watermark_page)
        pdf_writer.addPage(page)
###這一行是加密,如果只想加密,上面的添加水印都可以刪除。
    pdf_writer.encrypt(user_pwd="",owner_pwd="xx1234")  # 設置pdf密碼
    # pdf_writer.
    # pdf_writer.encrypt()
    with open(output, 'wb') as out:
        pdf_writer.write(out)

 

解決方案來源:https://stackoverflow.com/questions/13109867/python-pdf-set-password-protected-print-copy-paste-options

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章