内容概述 含水印扫描型PDF文件,其中某页如下图所示,用Python去除其页顶及页底的水印。
文章图片
处理思路:PDF中的每一页的水印的相对位置基本相同,将PDF每一页输出成图片,然后进行图片编辑,用白色填充方形覆盖水印,最后这些处理后的图片重新合成PDF文件。
该方法缺点:
- 处理后的得到PDF文件大小比原文件大了不少。
- 那种还可以提取文字的PDF,用该法处理后PDF文件就再不能提取文字了。
- 很难处理夹杂在文本中水印。
- 禁止打印PDF变成可打印了。
- 安装poppler软件,并将其执行文件所在文件夹路径新添至环境变量Path(针对Windows系统)。
pip install pdf2image
pip install fpdf
from pdf2image import convert_from_path
from PIL import ImageDraw# 100dpi对应文档的长宽及水印左上右下坐标
filePath = "a.pdf"
dpi = 100 #
watermark1 = (290, 47, 536, 66)
watermark2 = (283, 1072, 542, 1165)
gWidth = 827
gHeight = 1170
###########dpi2 = 150 # 按需调整这个参数<===============
pages = convert_from_path(filePath, dpi2)
width, height = pages[0].size# 方便多次调整,不用次次用系统自带绘图软件获得坐标位置
# 长宽貌似不与dpi成比例关系
watermark1 = (watermark1[0] * width / gWidth, watermark1[1] * height / gHeight, \
watermark1[2] * width / gWidth, watermark1[3] * height / gHeight)watermark2 = (watermark2[0] * width / gWidth, watermark2[1] * height / gHeight, \
watermark2[2] * width / gWidth, watermark2[3] * height / gHeight)print(watermark1)
print(watermark2)num = 0
for page in pages:draw = ImageDraw.Draw(page)# 水印涂白,可用系统自带绘图软件获得坐标位置
draw.rectangle(watermark1, fill = 'white')
draw.rectangle(watermark2, fill = 'white')
outPath = 'out/%d.jpg' % numprint(outPath)
page.save(outPath, 'JPEG')
num = num + 1
将处理后的图片合成PDF文件
from fpdf import FPDF
from PIL import Image
import os,redef makePdf(pdfFileName, listPages): cover = Image.open(listPages[0])
width, height = cover.size pdf = FPDF(unit = "pt", format = [width, height]) listPages.sort(key = lambda i : int(re.compile(r'(\d+)').search(i).group(1))) for page in listPages:
print(page)
pdf.add_page()
pdf.image(page, 0, 0) pdf.output(pdfFileName, "F")makePdf("result.pdf", ["out/"+imgFileName for imgFileName in os.listdir('out') \
if imgFileName.endswith("jpg")])
参考资料
- 用Python将多张图片合并成一PDF文件
- GitHub - Belval/pdf2image: A python module that wraps the pdftoppm utility to convert PDF to PIL Image object
推荐阅读
- Python数据可视化|Python数据可视化之随机漫步
- 自学python|数据可视化_模拟随机漫步
- python|numpy刷题——02
- 钉钉自动打卡
- Python|APP开发用什么框架最好(这5大框架,开发者必备神器)
- 人工智能+大数据|特征工程(特征预处理(无量纲化处理))
- 程序员|作为一只Python爬虫(如何破解滑动验证码)
- python批量自动整理文件
- Python爬虫|逆向系列 | AES逆向加密案例分析