使用Python给PDF加水印以及加密码

hello,大家好,今天给大家分享一下利用Python给pdf加水印以及密码的知识,知识点很简单,关键是其中出现的一个问题想和大家分享。
问题如下:输出加水印和加密的pdf文件时,会报如下错误:UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 8-9: ordinal not in range(256)
这个问题很头疼,实在不好办,好在网上有大神,给出了指点意见,感谢大神,附上链接:https://blog.csdn.net/idontknow0_0/article/details/83749265
解决办法:找到PyPDF2下utils.py的238行,我的路径为:D:\Program Files (x86)\Python\lib\site-packages\PyPDF2\utils.py。然后把r = s.encode(‘latin-1’)替换为如下代码即可。
未替换时:

        else:
            r = s.encode('latin-1')
            if len(s) < 2:
                 bc[s] = r
             return r

替换后

        else:
            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

好了,想分享的内容表达完了,上代码:

'''10、加水印并加密pdf'''
from PyPDF2 import PdfFileReader,PdfFileWriter
from copy import copy
watermark_pdf=PdfFileReader('C:\\Users\\Administrator\\Desktop\\watermark.pdf')
watermark_page=watermark_pdf.getPage(0)
pdf_reader=PdfFileReader('C:\\Users\\Administrator\\Desktop\\reordered.pdf')
pdf_writer=PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
    original_page=pdf_reader.getPage(page)
    new_page=copy(watermark_page)
    new_page.mergePage(original_page)
    pdf_writer.addPage(new_page)
pdf_writer.encrypt('1')
with open('C:\\Users\\Administrator\\Desktop\\encrypted.pdf','wb') as out:
    pdf_writer.write(out)

如果大家感兴趣,可以做一下这个作业:
作业要求:
1、打开网易2019年二季度财报
2、给PDF加水印
3、加密该文件
4、生成encrypted.pdf文件
PDF百度云链接:链接: https://pan.baidu.com/s/1WsTV4tG6Qvkt5p07G5Fbmw 提取码: 73q5

你可能感兴趣的:(python)