IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 用Python去除扫描型PDF中的水印 -> 正文阅读

[Python知识库]用Python去除扫描型PDF中的水印

内容概述

含水印扫描型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' % num
    
    print(outPath)
    page.save(outPath, 'JPEG')
    num = num + 1

将处理后的图片合成PDF文件

from fpdf import FPDF
from PIL import Image
import os,re

def 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")])

参考资料

  1. 用Python将多张图片合并成一PDF文件
  2. GitHub - Belval/pdf2image: A python module that wraps the pdftoppm utility to convert PDF to PIL Image object
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:27:16  更:2022-03-10 22:30:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:33:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码