zclinux

注意,下文中的PDF文档是纯文字格式,而且非扫描版的PDF文件。

如果是扫描版或者带有图片的。可能转起来会出现排版异常并且图片无法保存到.doc文件中。

正文开始:

需要安装依赖包

pdfminer3k

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

或者下载资源手动安装。任意选一种即可。

正文部分:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import importlib

importlib.reload(sys)

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import *
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

\'\'\'
解析pdf文件,获取文件中包含的各种对象
\'\'\'


# 解析pdf文件函数
def parse(pdf_path):
    fp = open(pdf_path, \'rb\')  # 以二进制读模式打开
    # 用文件对象来创建一个pdf文档分析器
    parser = PDFParser(fp)
    # 创建一个PDF文档
    doc = PDFDocument()
    # 连接分析器 与文档对象
    parser.set_document(doc)
    doc.set_parser(parser)

    # 提供初始化密码
    # 如果没有密码 就创建一个空的字符串
    doc.initialize()

    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 创建PDf 资源管理器 来管理共享资源
        rsrcmgr = PDFResourceManager()
        # 创建一个PDF设备对象
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 创建一个PDF解释器对象
        interpreter = PDFPageInterpreter(rsrcmgr, device)

        # 用来计数页面,图片,曲线,figure,水平文本框等对象的数量
        num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0

        # 循环遍历列表,每次处理一个page的内容
        for page in doc.get_pages():  # doc.get_pages() 获取page列表
            num_page += 1  # 页面增一
            interpreter.process_page(page)
            # 接受该页面的LTPage对象
            layout = device.get_result()
            for x in layout:
                if isinstance(x, LTImage):  # 图片对象
                    num_image += 1
                if isinstance(x, LTCurve):  # 曲线对象
                    num_curve += 1
                if isinstance(x, LTFigure):  # figure对象
                    num_figure += 1
                if isinstance(x, LTTextBoxHorizontal):  # 获取文本内容
                    num_TextBoxHorizontal += 1  # 水平文本框对象增一
                    # 保存文本内容
                    with open(r\'test.doc\', \'a\', encoding=\'utf-8\') as f:  # 生成doc文件的文件名及路径
                        results = x.get_text()
                        f.write(results)
                        f.write(\'\n\')
        print(\'对象数量:\n\', \'页面数:%s\n\' % num_page, \'图片数:%s\n\' % num_image, \'曲线数:%s\n\' % num_curve, \'水平文本框:%s\n\'
              % num_TextBoxHorizontal)


if __name__ == \'__main__\':
    pdf_path = r\'test.pdf\'  # pdf文件路径及文件名
    parse(pdf_path)

将需要转换的PDF格式的文件命名为test.pdf,而且和这个.py文件在同一个文件夹下即可

点击运行,会在同级目录下自动生成test.doc文件。

转自:https://blog.csdn.net/Initiallysunny/article/details/79960838

分类:

技术点:

相关文章: