首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python 实用程序 PDF转Word

阅读文本大概需要 6 分钟。

现在网上有很多文档是 pdf 格式,虽然这个格式阅读起来很方便,并且里面的内容不会乱掉,但相应的我们就无法修改里面的内容。虽然现在市面上有很多 pdf 转 word 软件,比如 wps,但大多数的软件是要收费的,并且价格不菲。

前些天就有人叫我帮她把 pdf 文档转成 word 的文档。因为 pdf 文档里面的内容有很多,如果全部打印的话,费用还是挺高的。所以她想把里面的内容格式修改下,比如行间距,字间距等等。通过这样的修改,可以把文档的页数减少很多,这样就省下不少的钱。

于是乎我就想到了利用 python 来写个程序,把 pdf 转成 word 文档。秉承着不要重复造轮子的想法,我首先在网上搜索了下。果然已经有人写好了,我们直接拿来用就行。程序一共只有 60 行代码,使用也非常的简单,

程序源代码

importos

fromconfigparserimportConfigParser

fromioimportStringIO

fromioimportopen

fromconcurrent.futuresimportProcessPoolExecutor

frompdfminer.pdfinterpimportPDFResourceManager

frompdfminer.pdfinterpimportprocess_pdf

frompdfminer.converterimportTextConverter

frompdfminer.layoutimportLAParams

fromdocximportDocument

defread_from_pdf(file_path):

withopen(file_path,'rb')asfile:

resource_manager = PDFResourceManager()

return_str = StringIO()

lap_params = LAParams()

device = TextConverter(

resource_manager, return_str, laparams=lap_params)

process_pdf(resource_manager, device, file)

device.close()

content = return_str.getvalue()

return_str.close()

returncontent

defsave_text_to_word(content, file_path):

doc = Document()

forlineincontent.split('\n'):

paragraph = doc.add_paragraph()

paragraph.add_run(remove_control_characters(line))

doc.save(file_path)

defremove_control_characters(content):

mpa = dict.fromkeys(range(32))

returncontent.translate(mpa)

defpdf_to_word(pdf_file_path, word_file_path):

content = read_from_pdf(pdf_file_path)

save_text_to_word(content, word_file_path)

defmain():

config_parser = ConfigParser()

config_parser.read('config.cfg')

config = config_parser['default']

tasks = []

withProcessPoolExecutor(max_workers=int(config['max_worker']))asexecutor:

forfileinos.listdir(config['pdf_folder']):

extension_name = os.path.splitext(file)[1]

ifextension_name !='.pdf':

continue

file_name = os.path.splitext(file)[]

pdf_file = config['pdf_folder'] +'/'+ file

word_file = config['word_folder'] +'/'+ file_name +'.docx'

print('正在处理: ', file)

result = executor.submit(pdf_to_word, pdf_file, word_file)

tasks.append(result)

whileTrue:

exit_flag =True

fortaskintasks:

ifnottask.done():

exit_flag =False

ifexit_flag:

print('完成')

exit()

if__name__ =='__main__':

main()

使用方法

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180711A0A0IX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券