当前位置: 首页 > article >正文

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 shutil

def 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.0
        zoom_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 += 1
    return 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 = -1
        return 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 os

def sort_key(s):
    if s:
        try:c = re.findall('^\d+', s)[0]
        except:c = -1
        return 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 = 1
        for img in imgs:
            print('+++++++++> {}/{},{} '.format(processCount,len(imgs),img))
            processCount += 1
            dakai = 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 shutil

    
def 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.size
        for pos in product(range(width), range(height)):
            if sum(img.getpixel(pos)[:3]) > 600: 
                img.putpixel(pos, (255,255,255))
        img.save(des_path)


http://www.kler.cn/news/306127.html

相关文章:

  • 房产销售系统开发:SpringBoot技术要点
  • 避免 PyCharm 将该 Python 脚本作为测试运行
  • 串口数据波形显示工具对比
  • k8s service如何实现流量转发
  • Python 课程10-单元测试
  • 基于 TDMQ for Apache Pulsar 的跨地域复制实践
  • 2024.9.14 Python与图像处理新国大EE5731课程大作业,马尔可夫随机场和二值图割,校正立体图像的深度
  • 攻击者如何在日常网络资源中隐藏恶意软件
  • rust + bevy 实现小游戏 打包成wasm放在浏览器环境运行
  • Vue3使用Websocket进行跨页面通信
  • 2024年金九银十最新版Java面试题及答案整理(持续更新)
  • 从单体到微服务:FastAPI ‘挂载’子应用程序的转变
  • AI在医学领域:医学AI的安全与隐私全面概述
  • 【iOS】ViewController的生命周期
  • Linux06(vi/vim)
  • 【Python机器学习】循环神经网络(RNN)——超参数
  • 什么是Java 语法糖?
  • ARM驱动学习之8 动态申请字符类设备号
  • sqli-labs Basic Challenge Less_1 通关指南
  • 【AI学习】陶哲轩在 2024 年第 65 届国际数学奥林匹克(IMO)的演讲:AI 与数学
  • 基于YOLOV8+Pyqt5光伏太阳能电池板目标检测系统
  • 使用docker配置wordpress
  • SQLite的入门级项目学习记录(一)
  • Kafka 消息丢失如何处理?
  • kubeadm方式安装k8s续:
  • 【Unity实战】SO反序列化正确姿势
  • 【智路】智路OS Airos Edge 2.0 Quick Start
  • 利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用
  • 通过logstash同步elasticsearch数据
  • 【资料分析】常见的坑