Python pdf 转 docx

本文介绍了用 pdf2docx 将 pdf 转成 docx 的方法,发现转换的时间较长,而且没有进度,仅在控制台有输出,而 convert 的逐页转换会生成多个 docx, 因此写了个逐页转换的 demo
首先是基本的使用

import pdf2docx
from docxcompose import composer
from pdf2docx import parse

def convert(file_name, doc_file_name):
    cv = pdf2docx.Converter(file_name)
    cv.convert(doc_file_name)
    cv.close()

修改后

import pdf2docx
from docx import Document

if __name__ == '__main__':
    file_name = 'E:\\西瓜书配套南瓜书.pdf'
    doc_file_name = 'E:\\西瓜书配套南瓜书.docx'
    cv = pdf2docx.Converter(file_name)
    cv.parse(0, None, None, **cv.default_settings)
    # 解析也需要一定时间,这里也可以设个 10% 类似这样的
    docx_file = Document()
    for page in cv.pages:
        if not page.finalized:
            continue
        try:
            page.make_docx(docx_file)
        except Exception as e:
            print('Ignore page  due to making page error: ', e)
        # 可以在这里根据页数计算出粗略的进度
    docx_file.save(doc_file_name)
    cv.close()

利用 pdf2docx 逐页转换生成多个 docx 再进行合并版(有点取巧了)

page_num = 5
for i in range(0, page_num):
    page_file_name = 'E:\\temp\\%s.docx' % (str(i))
    cv.convert(page_file_name, start=i, end=i + 1)
    if i == 0:
        document = docx.Document("E:\\temp\\0.docx")
        mer = composer.Composer(document)
    else:
        doc = docx.Document(page_file_name)
        doc.add_page_break()
        mer.append(doc)
    progress = (i + 1) / page_num
    print(progress)
cv.close()
mer.save(doc_file_name)
shutil.rmtree('E:\\temp')
posted @ 2024-08-25 21:48  1450701239  阅读(29)  评论(0编辑  收藏  举报