内容概述

含水印扫描型PDF文件,其中某页如下图所示,用Python去除其页顶及页底的水印。

处理思路:PDF中的每一页的水印的相对位置基本相同,将PDF每一页输出成图片,然后进行图片编辑,用白色填充方形覆盖水印,最后这些处理后的图片重新合成PDF文件。

该方法缺点:

  1. 处理后的得到PDF文件大小比原文件大了不少。
  2. 那种还可以提取文字的PDF,用该法处理后PDF文件就再不能提取文字了。
  3. 很难处理夹杂在文本中水印。

副作用:

  1. 禁止打印PDF变成可打印了。

先前步骤:

  1. 安装poppler软件,并将其执行文件所在文件夹路径新添至环境变量Path(针对Windows系统)。
  2. pip install pdf2image
  3. pip install fpdf

放码过来

将PDF输出成图片文件集

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.sizepdf = 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")])

参考资料

  1. 用Python将多张图片合并成一PDF文件
  2. GitHub - Belval/pdf2image: A python module that wraps the pdftoppm utility to convert PDF to PIL Image object

用Python去除扫描型PDF中的水印相关推荐

  1. Python从Word/PPT/PDF中抽取图片

    Python从Word/PPT/PDF中抽取图片 PS 1:也是从网上各个帖子中学习的代码,因此代码的格式以及内容有粘贴网上其他大神的代码,如有侵权请告知删除 2:本次设计意在用pyinstaller ...

  2. 如何去除PDF中的水印,PDF去水印方法

    如何去除PDF中的水印, 去除PDF水印的方法有哪些?想要去除PDF中的水印就需要使用到PDF编辑器来操作,很多人对于PDF编辑怎么去除PDF水印的操作方法也不是很了解,下面小编就为大家分享一下PDF ...

  3. 怎么去除PDF中的水印

    很多的PDF文件都有添加水印,但是我们使用文件的时候水印会影响我们对文件的阅读与编辑,那么我们需要把水印去除,水印要如何去除呢?方法是什么呢?就跟小编一起来看看下面的文章了解一下吧! 方法一:迅捷PD ...

  4. PDF怎么修改,如何去除PDF中的水印

    时代在进步,科技在发展,人们的生活也在进步与发展,我们在工作中跟学习中会接触到需要不同类型的文件,现在接触PDF文件的时候有很多,也会有需要编辑PDF文件的时候,那么,PDF文件怎么修改呢,PDF文件 ...

  5. 几个简单的操作去除PDF中的水印

    有时在网上下一些PDF格式的文档经常会遇到有水印的,拿来自己用的时候有水印又不方便,想要作为己用就得把这些水印给删除掉.那么怎样去除PDF中的水印呢? 接触过PDF文件的人应该都知道通常用来查看PDF ...

  6. 如何使用PDF编辑器中文版去除PDF中的水印

    我们日常的工作中会遇到很多类型的文件,有Word文档,TXT格式还有PDF文件,在Word文档中大家都知道该怎样删除和添加水印,那么在PDF文件中删除水印,是不是有很多的小伙伴还不知道该怎样操作,那么 ...

  7. 使用代码在网站导出A4纸大小的PDF中插入水印

    要在网站导出A4纸大小的PDF中插入水印,可以使用 Python 中的 PyPDF2 库.下面是一个简单的示例代码,演示如何在 A4 大小的 PDF 文件中插入一个水印: import PyPDF2# ...

  8. 扫描型PDF转成可搜索可复制的文字型PDF,使用PDF24 OCR 程序报“下载需要的文件时出现一个错误”

    1.PDF工具 -- PDF24 需要找一个将扫描型的PDF转换成可搜索可复制的PDF文件的工具,搜到的大部分工具我都试用了,要么转换出来样式不行,要么收费.然后找到了一个下图所示的PDF24 的工具 ...

  9. open cv roi提取_使用pytesseract open cv从扫描的pdf中提取文本

    open cv roi提取 The process of extracting information from a digital copy of invoice can be a tricky t ...

最新文章

  1. 学习笔记(3.29)
  2. Tomcat学习总结(6)——Tomca常用配置详解
  3. Anroid-async-http封装网络请求框架源码分析
  4. Three.js中实现ASCII文本动画效果
  5. DbLookUpCombobox的使用方法
  6. androidActivity生命周期
  7. bettertouchtool闪退_BetterTouchTool for Mac 3.238 无闪退 触控板增强工具
  8. acm竞赛java很少_ACM比赛中JAVA的应用
  9. jQuery多文件上传的实例
  10. okHttp3自用封装
  11. Delphi2010
  12. iPhone手机微信下载的文档传输到win10系统桌面
  13. ADS1110输入阻抗
  14. overload override
  15. Java经典300例-基础篇-004:整数类型最大值
  16. html 漂亮的边框效果图,Css效果之好看的边框颜色大全
  17. 小时候电视剧里常听到的“IT精英”,今天怎么变成了“码农”?
  18. QTreeView使用总结1,一个简单示例
  19. php培训机构报名预约系统
  20. SU-03T语音识别模块使用以及注意事项

热门文章

  1. Linux TCP server系列(5)-select模式下的单进程server
  2. 【转】持续交付和DevOps的前世今生
  3. 【转】使用Azure Rest API获得Access Token介绍
  4. 第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验
  5. 一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74
  6. html的绝对定位脱离文档流吗,子元素设置绝对定位之后脱离文档流!
  7. 华为把服务器虚拟底层锁了,华为全面关闭解码锁服务:马上升级到很吓人的技术!...
  8. java中sql之count_按SQL Server中的count()子句分组
  9. 2字节十六进制浮点数 qt_Qt之8个字节转化为double小数
  10. 【51Nod - 1182】完美字符串(贪心,字符串)