资讯专栏INFORMATION COLUMN

python 实用程序 | PDF 转 Word

sorra / 781人阅读

摘要:虽然现在市面上有很多转软件,比如,但大多数的软件是要收费的,并且价格不菲。于是乎我就想到了利用来写个程序,把转成文档。具体的程序逻辑,可以去查看原文。本文首发于公众号痴海,每天分享干货,后台回复,领取最新教程。

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

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

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

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

程序源代码

import os
from configparser import ConfigParser
from io import StringIO
from io import open
from concurrent.futures import ProcessPoolExecutor

from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from docx import Document

def read_from_pdf(file_path):
    with open(file_path, "rb") as file:
        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()
        return content

def save_text_to_word(content, file_path):
    doc = Document()
    for line in content.split("
"):
        paragraph = doc.add_paragraph()
        paragraph.add_run(remove_control_characters(line))
    doc.save(file_path)

def remove_control_characters(content):
    mpa = dict.fromkeys(range(32))
    return content.translate(mpa)

def pdf_to_word(pdf_file_path, word_file_path):
    content = read_from_pdf(pdf_file_path)
    save_text_to_word(content, word_file_path)

def main():
    config_parser = ConfigParser()
    config_parser.read("config.cfg")
    config = config_parser["default"]

    tasks = []
    with ProcessPoolExecutor(max_workers=int(config["max_worker"])) as executor:
        for file in os.listdir(config["pdf_folder"]):
            extension_name = os.path.splitext(file)[1]
            if extension_name != ".pdf":
                continue
            file_name = os.path.splitext(file)[0]
            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)
    while True:
        exit_flag = True
        for task in tasks:
            if not task.done():
                exit_flag = False
        if exit_flag:
            print("完成")
            exit(0)

if __name__ == "__main__":
    main()
使用方法

首先去 github 上把项目 clone 或下载项目到本地.

github : https://github.com/python-fan...

git clone git@github.com:simpleapples/pdf2word.git

然后进入项目目录,建立虚拟环境,并安装依赖。

pip install -r requirements.txt

最后修改 config.cfg 文件,指定存放 pdf 和 word 文件的文件夹,以及同时工作的进程数,就可以执行 python main.py。

具体的程序逻辑,可以去查看原文。作者都分析的很详细。

https://zhuanlan.zhihu.com/p/...。

本文首发于公众号「痴海」,每天分享 Python 干货,后台回复「1024」,领取 2018 最新 Python 教程。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42020.html

相关文章

  • 假装Python高手,把类这样改,真刺激!

    摘要:今天我们来说一个非常实用的例子,小菜接到组长老王的一个任务,安排一个新的活,这个活是这样的老王小菜啊,你帮我写一个登入脚本,跑十几条命令到服务器上,然后存一下日志。这个时候,小菜偷偷的瞄了一眼组长老王,常舒一口气,总于写完了。 Python学了好几年,发现功力还是那样,很多同学经常这样抱...

    dance 评论0 收藏0
  • 学习Python想放弃,因为你没有培养自己的兴趣!

    摘要:为啥你天天刷抖音一点都不烦,因为你觉得视频好看你有兴趣啊。比如我们说你玩是不是要开始搭建一个自己的网站,是不是可以自己写一个小的脚本来自动发消息给你的女朋友等等,通过这样的小例子来慢慢的培养自己的学习的兴趣。学习,切勿贪快贪多。 大家好,我是菜鸟哥! 周末啦,跟大家聊一下我们粉丝团的情况...

    ideaa 评论0 收藏0
  • 我是如何将博客PDF

    摘要:但发现导出来的没有高亮语法没有语法高亮咋看啊,所以到这里我就放弃了,将就用一下博客园生成的吧爬虫学习上面提供的接口是一个生成一个文件,我是不可能一个一个将链接和标题放上去生成的因为博客园上发的也将近篇了。 前言 只有光头才能变强 之前有读者问过我:3y你的博客有没有电子版的呀?我想要份电子版的。我说:没有啊,我没有弄过电子版的,我这边有个文章导航页面,你可以去文章导航去找来看呀..然后...

    mindwind 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<