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