python3处理docx并flask显示

这篇具有很好参考价值的文章主要介绍了python3处理docx并flask显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

最近有需求处理docx文件,并讲内容显示到页面,对world进行在线的阅读,这样我这里就使用flask+Document对docx文件进行处理并显示,下面直接上代码:

Document处理:

首先下载Document的库文件,先直接安装最新版的python-docx,如果不行则换成1.1.0版本:

pip install python-docx
pip install python-docx==1.1.0

处理docx代码如下:

def ReadVADocx(ProjectName,DocxName):
    docxfilepath = vaReportDir + "\\" + ProjectName + "\\" + DocxName
    paragraphs = ReadDocx(docxfilepath)
    return paragraphs

def ReadDocx(docxfilepath):
    doc = Document(docxfilepath)
    paragraphs = list()
    pattern = re.compile('rId\d+')
    for graph in doc.paragraphs:
        level = graph.style.name.split(' ')[-1]
        if level == "Normal":
            level = None
        elif level == "Preformatted":
            level = None
        paragraph = {
            'text': graph.text,
            'level': level,
            'images': ""
        }
        paragraphs.append(paragraph)
        for run in graph.runs:
            if run.text == '':
                contentID = pattern.search(run.element.xml)
                if contentID:
                    contentID = contentID.group(0)
                    try:
                        contentType = doc.part.related_parts[contentID].content_type
                    except KeyError as e:
                        print(e)
                        continue
                    if not contentType.startswith('image'):
                        continue
                    imgData = doc.part.related_parts[contentID].blob
                    image_base64 = base64.b64encode(imgData).decode('utf-8')
                    paragraph = {
                        'text':  run.text,
                        'level': run.style.name.split(' ')[-1] if run.style.name.startswith('Heading') else None,
                        'images': image_base64
                    }
                    paragraphs.append(paragraph)

上述代码会对docx文件进行遍历,并将对应的内容和等级放入数组中

下面是调用代码:

@app.route('/ViewVADocx', methods=['GET'])
def ViewVADocx():
     try:
        DocxName = request.args.get('docx')
        ProjectName = request.args.get('name')
        paragraphs = engine.ReadVADocx(ProjectName,DocxName)
        return render_template("viewdocx.html", n_getname=ProjectName, n_user=user,paragraphs=paragraphs)
     except Exception as e:
         return render_template('error-500.html')

html编写: 

然后就是需要讲对应的内容在页面进行展示,下面列出html代码:

{% extends "mould.html" %}

{% block head %}
{% endblock %}

{% block body %}
        <!--body wrapper start-->
        <div class="wrapper">
            <div class="floating-box" id="floatingBox">↑回到顶部↑</div>

              <!--Start Page Title-->
               <div class="page-title-box">
                    <h4 class="page-title">{{ n_getname }}:扫描节点线</h4>
                    <div class="clearfix"></div>
                 </div>
                  <!--End Page Title-->
                <!--Start row-->
                  <div class="row">
                     <div class="col-md-12">
                         <div class="white-box">
                            <h2 style="font-weight: bold;">快速导航:</h2>
                            {% for paragraph in paragraphs %}
                                {% if paragraph.level == "1"  %}
                                    <p>
                                    <a href="#Section{{ loop.index0 }}" class="hover-link" style="font-weight: bold;">{{ paragraph.text }}</a>
                                {% elif  paragraph.level == "2" %}
                                    <p style="text-indent: 25px;">
                                    <a href="#Section{{ loop.index0 }}" class="hover-link2" style="font-weight: bold;">{{ paragraph.text }}&#9;</a>
                                    </p>
                                {% endif %}
                            {% endfor %}
                         </div>
                            {% for paragraph in paragraphs %}
                                {% if paragraph.level  %}
                                    {% if paragraph.level == "Title" %}
<!--                                        <h2 align="center">{{ paragraph.text }}</h2>-->
                                    {% elif  paragraph.level == "1" %}
                                        </div>
                                        <div class="white-box">
                                        <h{{ paragraph.level }} id="Section{{ loop.index0 }}" style="font-weight: bold;">{{ paragraph.text }}</h{{ paragraph.level }}>
                                    {% else %}
                                        <h{{ paragraph.level }} id="Section{{ loop.index0 }}">{{ paragraph.text }}</h{{ paragraph.level }}>
                                    {% endif %}
                                {% else %}
                                    {% if paragraph.images %}
                                        <p><img src="data:image/png;base64,{{ paragraph.images }}" alt="Image"></p>
                                    {% else %}
                                        <p style="color: black;">{{ paragraph.text }}</p>
                                    {% endif %}
                                {% endif %}
                            {% endfor %}

                     </div>
                </div>
        </div>

{% endblock %}

{% block list %}
        <style>
           .hover-link {
                font-size: 20px;
            }
            .hover-link:hover {
                color: red;
                font-size: 30px;
            }
            .hover-link2 {
                font-size: 15px;
            }
            .hover-link2:hover {
                color: red;
                font-size: 20px;
            }
        </style>
      <style>
        /* CSS 样式,用于定义悬浮框的外观 */
        .floating-box {
          position: fixed;
          bottom: 20px;
          right: 20px;
          width: 80px;
          height: 50px;
          background-color: #ff9900;
          color: #fff;
          text-align: center;
          line-height: 50px;
          cursor: pointer;
        }
      </style>
  <script>
    // JavaScript 代码
    var floatingBox = document.getElementById('floatingBox');

    // 点击事件监听器
    floatingBox.addEventListener('click', function() {
      window.scrollTo({ top: 0, behavior: 'smooth' });
    });
  </script>
{% endblock %}

其中添加了样式和回到顶部等小功能,方便浏览,最后的使用效果如下:

python3处理docx并flask显示,代码编程,flask,python,后端 

后记:

代码只做了docx文件的内容展示,包括文字和图片,并对等级进行了划分,没有对docx的修改功能,感兴趣的可以自己研究下 

 文章来源地址https://www.toymoban.com/news/detail-775373.html

 

到了这里,关于python3处理docx并flask显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python - flask后端开发笔记

    ​ Flask入门 有一篇很全面的博客可以参考:Python Flask Web 框架入门 跨域问题处理 文件发送 ​

    2024年02月07日
    浏览(64)
  • python3 flask 实现对config.yaml文件的内容的增删改查,并重启服务

     config.yaml配置文件内容 功能就是userpass下的用户名和密码做增删改查,并重启hy2服务 直接上代码 add功能,带验证 del功能   查询功能  代码完成:chatgpt4 

    2024年02月22日
    浏览(50)
  • Python Flask 后端向前端推送信息——轮询、SSE、WebSocket

    后端向前端推送信息,通知任务完成 轮询 SSE WebSocket 请求方式 HTTP HTTP TCP长连接 触发方式 轮询 事件 事件 优点 实现简单易兼容 实现简单开发成本低 全双工通信,开销小,安全,可扩展 缺点 消耗较大 不兼容IE 传输数据需二次解析,开发成本大 适用场景 服务端向客户端单向

    2023年04月19日
    浏览(82)
  • flask-cache使用报错Python3 ModuleNotFoundError: No module named ‘werkzeug.contrib‘

    Flask              2.1.2 Flask-Cache        0.13.1 Werkzeug           2.1.2 当使用了flask_cache时导致运行时问题出现:ModuleNotFoundError: No module named \\\'werkzeug.contrib\\\' 1、修改文件/Users/zhangyanli/.pyenv/versions/flaskenv/lib/python3.7/site-packages/flask_cache/__init__.py。将上一行改为下一行 【备注】这个

    2024年02月09日
    浏览(37)
  • python处理Excel Pandas xlwings numpy, jupyter,docx,jieba 词频统计 flash

    顺序不变,是可以的 如果李四和王五两行换一下,就不对了, 结果 pandas的nlargest(n,“排序的列”),只能求最大N个值 同比 df[‘昨日’] = df[“销售金额”].shift() shift() 会把销售金额放入昨日 python 在网页上显示Excel Excel 修改数据,网页只有刷新就可以了。 python 制作网页查询

    2024年02月10日
    浏览(47)
  • 手机版python编程软件下载,手机python3.7编程软件

    大家好,小编来为大家解答以下问题,手机python编程软件哪个好,手机版python编程软件下载,现在让我们一起来看看吧! 编程是一项非常有用也很有趣的技能,但是很多人可能觉得在电脑上学习编程太麻烦了,或者没有时间和条件去学习。其实,在手机上也可以学习编程哦!

    2024年02月03日
    浏览(58)
  • 手机版python编程软件下载,手机python3.8编程软件

    这篇文章主要介绍了手机python编程软件哪个好,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 本篇文章给大家谈谈安卓手机python编程软件,以及安卓好用的python编辑器,希望对各位有所帮助,不要忘了

    2024年02月19日
    浏览(46)
  • Python 学习之路:python3中pygame解决中文显示

            这篇文章主要介绍python3中pygame解决中文显示问题,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。   1.实例代码展示: 2.实例运行效果: 3.路径和字体设置:         需要自己下载好字体,放置一个指定

    2024年02月11日
    浏览(41)
  • python3.7手机编程软件下载,用手机编程python的软件

    大家好,小编来为大家解答以下问题,手机python3.0编程软件哪个好,python编程手机软件哪个好,今天让我们一起来看看吧! 手机最强Python编程神器,在手机上运行Python不再是梦!来源丨软件测评说手机编程软件有很多,大部分都很难使用,操作不灵活,甚至不能安装第三方库快码知

    2024年01月19日
    浏览(60)
  • 下载python3.10版本pycharm仍显示python3.1以及官网如何下载旧版版本python

    第二节 安装Pycharm以及遇到的问题 目录 Day01新手小白学python 前言 一、pycharm下载安装 二、遇到的问题 1.下载的是python3.10版本仍显示python3.1 has reached its end-od-life and is no longer supported          2.官网如何下载旧版如3.9版本python         3.自定义安装路径 总结 安装Pycha

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包