微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python利用fitz库将pdf文件转换成html或者图片文件

对于存在分栏的pdf文件,可以利用fitz库进行处理:

  方式一:利用ocr技术对图片进行处理

   方式二:转换成html文件后进行处理

 

代码

import os
import PyTesseract
import cv2 as cv
import fitz

from PIL import Image
from tqdm import tqdm

class PdfHandler:
    def run(self):
        '''执行入口'''
        # 将指定pdf文件转换成html文件
        self.pdf_to_html('test.pdf','test.html')
        # 解析html文件
        self.parse_html('test.html')
        # 将pdf文件转换图片
        self.pdf_to_img('test.pdf','img_dir',5,5,0)
        # 解析图片
        for img_name in os.listdir('img_dir'):
            abs_img_name = f'img_dir/{img_name}'
            self.parse_img(abs_img_name)

    def pdf_to_html(self,pdf_path,html_path):
        '''
        pdf文件转换成html文件

        :param pdf_path: pdf文件路径
        :param html_path: html文件路径
        :return:
        '''
        # 打开pdf文件,并新建html文件
        with fitz.open(pdf_path) as pdf,open(html_path,'w',encoding='utf-8',newline='') as html_file:
            html_content = '''
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <Meta charset="UTF-8">
                <title>pdf转换后的html文件</title>
            </head>
            <body>
            '''
            # 遍历每一页pdf,并显示进度条
            for page in tqdm(pdf):
                html_content += page.get_text('html') # 提取每页内容为html
            html_content += '</body></html>'
            html_file.write(html_content) # 写入html文件


    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 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)

    def parse_html(self,html_name):
        '''
        解析html文件,比如xpath等
        :param html_name: html文件名
        :return:
        '''
        pass

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐