本文介绍了用 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')
标签:docx,name,Python,doc,cv,file,pdf,page
From: https://www.cnblogs.com/wzxzx/p/18379598