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