您的位置:首页 > 健康 > 美食 > Python实现pdf转图片、转文字、去水印

Python实现pdf转图片、转文字、去水印

2024/10/6 0:31:21 来源:https://blog.csdn.net/catontower/article/details/142107923  浏览:    关键词:Python实现pdf转图片、转文字、去水印

目录

1、将PDF转成多张图片

2、将图片目录中的所有图片转换成pdf

3、利用baidu_aip将多张图片转换成txt文本

4、去除pdf的水印


1、将PDF转成多张图片

安装:

pip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install fitz -i https://pypi.tuna.tsinghua.edu.cn/simple

pdf_to_img("输入.pdf","图片目录");

将“输入.pdf”转换成多张图片,存放在"图片目录"下。

import fitz
import os
import shutildef pdf_to_img(pdfPath,imgFile):father_path = os.path.abspath(os.path.dirname(pdfPath) + os.path.sep + ".")doc = fitz.open(pdfPath)if(os.path.exists(imgFile)):print("删除",imgFile)shutil.rmtree(imgFile)os.mkdir(imgFile)print("正在转换中。。。。。。")      pageCount = 1    for pg in range(doc.page_count):       page = doc[pg]rotate = int(0)zoom_x = 2.0zoom_y = 2.0        trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)pm = page.get_pixmap(matrix=trans, alpha=False)pm.save(imgFile + '\\%s.png' % (pg+1))print('+++++++++> {}/{}, {}.png '.format(pageCount,doc.page_count,pg+1))pageCount += 1return imgFile

2、将图片目录中的所有图片转换成pdf

convert_dir_pdf("图片目录","合成.pdf");

将“图片目录”中的所有图片合并成“合成.pdf",通过这种方式,能够实现pdf的拆分与合并。

import fitz
import os#排序图片
def sort_key(s):if s:try:c = re.findall('^\d+', s)[0]except:c = -1return int(c)#imgs:所有图片完整路径的数组
def convert_pics_pdf(imgs, pdf_path):doc = fitz.open()   for img in imgs:       print(img)           imgdoc = fitz.open(img)pdfbytes = imgdoc.convert_to_pdf()imgpdf = fitz.open("pdf", pdfbytes)doc.insert_pdf(imgpdf)       doc.save(pdf_path)#img_path:存放图片的目录
def convert_dir_pdf(img_path, pdf_path):imgs = os.listdir(img_path)imgs = sorted(imgs, key = sort_key)for i in range(0,len(imgs)):imgs[i] = os.path.join(img_path,imgs[i])convert_pics_pdf(imgs,pdf_path)

3、利用baidu_aip将多张图片转换成txt文本

img_to_txt("图片目录","输出.txt"),将图片目录下的所有图片转换成txt文本输出到“输出.txt"中。

百度的转换接口用了几年,还是比较稳定的,识别率也不错。网络上其他也有好几种图片转文本的方式,安装步骤比较繁琐,如果只是偶尔用一下就没有必要了。

from tkinter import *
import tkinter as tk
from tkinter import filedialog
from aip import AipOcr
import osdef sort_key(s):if s:try:c = re.findall('^\d+', s)[0]except:c = -1return int(c)def img_to_txt(imgPath,wordFile):APP_ID = "23403595"API_KEY = "MIvoIhkmsYHPiA2LOZmSu3o3"SECRET_KEY = "E063BVdf2kemnjF4hv9lcG0Xg5Of065k"client = AipOcr(APP_ID, API_KEY, SECRET_KEY)imgs = os.listdir(imgPath)imgs = sorted(imgs, key = sort_key)print("=============> ",imgs)wordFileName = open(wordFile, 'w',encoding='utf-8')try:processCount = 1for img in imgs:print('+++++++++> {}/{},{} '.format(processCount,len(imgs),img))processCount += 1dakai = open(imgPath + "/" + img, "rb")duqu = dakai.read()message = client.basicGeneral(duqu)for duqu in message.get("words_result"):words = duqu.get("words")print(words)wordFileName.write(words)wordFileName.write("\r\n")except Exception:print('===>Error')wordFileName.close()print("完成")

4、去除pdf的水印

步骤:先将pdf转换为图片,再去除图片上的水印,再合成一个新的pdf文件。

水印需要具体情况具体分析,这里采用最简单粗暴的方式,原理是将图片中水印的颜色(一般是灰色)替换为底色。

img_erase("图片目录"):将图片目录中的所有图片去除水印,存放在”图片目录_cvt"目录中。

完整代码如下所示:

from itertools import product
from PIL import Image
import os
import shutildef img_erase(img_path):imgs = os.listdir(img_path)newpath = img_path+'_cvt'if(os.path.exists(newpath)):print("删除",newpath)shutil.rmtree(newpath)os.mkdir(newpath)for img in imgs:print('++> ',img)src_path = os.path.join(img_path,img)des_path = os.path.join(newpath,img)img = Image.open(src_path)width, height = img.sizefor pos in product(range(width), range(height)):if sum(img.getpixel(pos)[:3]) > 600: img.putpixel(pos, (255,255,255))img.save(des_path)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com