受人所托,将一份pdf的水印去掉,找了许多软件,哎,都是收费的,被逼绝境,决定使用python来完成这一壮举。
具体思路如下:
下面逐步介绍
import os
from pdf2image import convert_from_path, convert_from_bytes
import tempfile
from pdf2image.exceptions import (
PDFInfoNotInstalledError,
PDFPageCountError,
PDFSyntaxError
)
def pdf2image2(pdfPath, imagePath, pageNum=10):
images = convert_from_path(pdfPath, poppler_path=r'C:\Users\zhangdongsheng\Downloads\poppler-0.68.0_x86\poppler-0.68.0\bin')
for image in images:
if not os.path.exists(imagePath):
os.makedirs(imagePath)
image.save(imagePath + '/' + '%s.jpg' % images.index(image), 'JPEG', quality=95)
pdf2image2('C:/Users/zhangdongsheng/Desktop/有水印.pdf', 'C:/Users/zhangdongsheng/Desktop/pdf_image')
需要安装pdf2image ,同时windows环境下需要下载一个名为popple的软件,下载地址为https://blog.alivate.com.au/poppler-windows/。
转为图片后,惊喜的发现图片里没有水印了,这应该和水印的制作方法有关,因此本文的第二部分,我并没有验证
这一步操作,我是参考了这篇文章: https://jishuin.proginn.com/p/763bfbd65862
文章里介绍的方法,从理论上是可以去除水印的,具体效果如何,由于pdf转为图片后水印自动消息,我没有验证,感兴趣的朋友可以自行验证。
使用python 将图片转为pdf,需要安装fpdf模块,转换的方法也比较简单,需要注意的是,在使用pdf的image方法添加图片时一定要注意顺序,我将图片以数字进行命名,根据数值大小的顺序添加图片到pdf里,保证pdf的内容是有序的
import os
from fpdf import FPDF
pdf = FPDF()
pdf.set_auto_page_break(0) # 自动分页设为False
path = 'C:/Users/zhangdongsheng/Desktop/pdf_image'
imagelist = [i for i in os.listdir(path)]
imagelist = [(int(item[:item.index(".")]), item) for item in imagelist]
imagelist = sorted(imagelist, key=lambda x: x[0])
for image in imagelist:
pdf.add_page()
pdf.image(os.path.join(path, image[1]), w=196, h=285) # 指定宽高
pdf.output(os.path.join('C:/Users/zhangdongsheng/Desktop', "无水印.pdf"), "F")
QQ交流群: 211426309