python中pdf处理库fitz的简单使用

一、安装fitz(需要依赖PyMuPDF)

pip install fitz
pip install pymupdf

 

 二、代码演示

复制代码
import os
import pytesseract
import cv2 as cv
import fitz

from PIL import Image
from tqdm import tqdm

class PdfHandler:

    def pdf_to_img(self,pdf_path,img_path,zoom_x,zoom_y,rotation_angle):
        '''
        pdf文件每页内容都转换成图片

        :param pdf_path:
        :param img_path:
        :param zoom_x:
        :param zoom_y:
        :param rotation_angle:
        :return:
        '''
        # 如果没有存储文件的目录,则创建
        if not os.path.exists(img_path):
            os.mkdir(img_path)
        # 打开PDF文件
        with fitz.open(pdf_path) as pdf:
            # 逐页读取PDF
            for page_index in tqdm(range(0, pdf.pageCount)):
                page = pdf[page_index]
                # 设置缩放和旋转系数,zoom_x, zoom_y取相同值,表示等比例缩放
                trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotation_angle)
                pm = page.getPixmap(matrix=trans, alpha=False)
                # 开始写图像
                page_num = page_index + 1 # 页码从1开始
                pm.writePNG(f'{img_path}/{page_num}.png') # 第1张图片名:1.png,以此类推

    def img_to_pdf(self,imgPath, new_pdf_name):
        '''
        将图片转为pdf

        :param imgPath: 图片路径
        :param new_pdf_name: 多张图片合并成的pdf文件名
        :return:
        '''
        with fitz.open() as doc:  # 新建一个空文档
            for path in os.listdir(imgPath):
                img = fitz.open(f'{imgPath}/{path}')  # 打开图片
                pdfbytes = img.convertToPDF()  # 使用图片创建单页的 PDF
                with fitz.open("pdf", pdfbytes) as imgpdf:
                    doc.insertPDF(imgpdf)
                img.close()
            doc.insert_pdf()
            doc.save(new_pdf_name)

    def split_pdf(self,old_pdf_name, new_pdf_name, from_page, to_page):
        '''
        从pdf文件中拆分出部分,拆出部分成为新的pdf文件

        :param old_pdf_name: 原pdf文件名
        :param new_pdf_name: 拆分后合并出的新pdf文件名
        :param from_page: 原pdf文件起始页码索引(0开始,默认0)
        :param to_page: 原pdf文件结尾页码索引(0开始,默认最后一页)
        :return:
        '''
        with fitz.open(old_pdf_name) as old_pdf, fitz.open() as new_pdf:
            new_pdf.insert_pdf(old_pdf, from_page, to_page)
            new_pdf.save(new_pdf_name)

    def get_pdf_text(self,pdf_path):
        '''
        获取每页pdf文件文本

        :param pdf_path: pdf文件路径
        :return:
        '''
        # 打开pdf文件,并新建html文件
        with fitz.open(pdf_path) as pdf:

            # 遍历每一页pdf,并显示进度条
            for page in tqdm(pdf):
                text = page.get_text() #提取文本,传入参数'html'即:page.get_text('html') 则提取每页内容为html
            print(f'第{page+1}页解析内容:\n{text}')


    def parse_img(self,img_name):
        '''
        利用opencv+pytesseract解析图片中的文字
        :param img_name: 具体图片名
        :return:
        '''
        img = cv.imread(img_name)
        text = pytesseract.image_to_string(Image.fromarray(img), lang='eng') # lang可以根据文本内容来定,简体中文:chi_sim
        print(text)
复制代码

 

posted @   eliwang  阅读(17922)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示