首页 > 编程语言 >Python工具箱系列(四十八)

Python工具箱系列(四十八)

时间:2024-01-18 11:14:01浏览次数:31  
标签:Python doc app parser print shape 文档 四十八 工具箱

如何操作docx文档(下)

     当要更细致的操作WORD文档时,python-docx库就有些力不从心了。这时强力的python win32com库可以帮助我们完成更细致复杂的工作。笔者经常要组织大型文档的汇总(例如标书),此时文档中插入的图片各式各样,缩写时也无从知道图片在整个文档中的顺序,所以对所有图片加题注就是一件非常费时的工作。此外,图片大小不一,整体的美观度会下降。如果人工调整,非常枯燥费力,此时python就可以大显神威,完成大量的自动化的工作,最后再辅以少量的人工即可。以下代码显示了对docx中的图片与表格进行调整的技巧。

import win32com.client as win32
from win32com.client import constants
import argparse
import sys


class action:

    def adjustfigures(self, infile, outfile):
        """
        调整文档中所有图片的大小
        """
        doc_app = win32.gencache.EnsureDispatch('Word.Application')
        doc_app.Visible = True
        doc = doc_app.Documents.Open(infile)
        print(f'pythonwin32com adjust figure in {infile}')
        print(f'shape counts: {doc.Shapes.Count}')
        print(f'inlineshape counts: {doc.InlineShapes.Count}')

        for index, shape in enumerate(doc.InlineShapes):
            print(f'handle figure {index}')
            # 调整图片大小
            ratio = shape.Height/shape.Width
            shape.Width = 200
            shape.Height = round(shape.Width*ratio)

            rng = shape.Range
            # 插入题注
            rng.InsertCaption(Label=constants.wdCaptionFigure,
                              Position=constants.wdCaptionPositionBelow, Title=f" InlineShapes-{index+1}")
            # 居中对齐
            rng.ParagraphFormat.Alignment = constants.wdAlignParagraphCenter

        doc.SaveAs(outfile)
        doc.Close()
        doc_app.Quit()

    def adjusttables(self, infile, outfile):
        """
        调整表格
        """
        doc_app = win32.gencache.EnsureDispatch('Word.Application')
        doc_app.Visible = True
        doc = doc_app.Documents.Open(infile)
        print(f'pythonwin32com adjust tables in {infile}')
        print(f'table counts: {doc.Tables.Count}')
        for index, table in enumerate(doc.Tables):
            print(f'handle table {index}')
            rng = table.Range
            # 插入题注
            rng.InsertCaption(Label=constants.wdCaptionTable,
                              Position=constants.wdCaptionPositionAbove, Title=f" table-{index+1}")
            # 居中对齐
            rng.ParagraphFormat.Alignment = constants.wdAlignParagraphCenter

        doc.SaveAs(outfile)
        doc.Close()
        doc_app.Quit()

if __name__ == '__main__':
    def parser():
        """
        分析用户命令行
        """
        parser = argparse.ArgumentParser()
        parser.add_argument("inputfilename", type=str, help="要处理的文档名称")
        parser.add_argument(
            "-t", "--table", action="store_true", help="调整表格位置")
        parser.add_argument("-f", "--figures",
                            action="store_true", help="调整图片位置")

        args = parser.parse_args()

        # 判断参数输入情况,如果没有参数,则显示帮助。
        if len(sys.argv) == 1:
            parser.print_help()
            return

        updator = action()
        
        docxfilename = args.inputfilename
        targetfilename = r'd:\test\demo.docx'
        if args.table:
            updator.adjusttables(docxfilename, targetfilename)

        if args.figures:
            updator.adjustfigures(docxfilename, targetfilename)

    parser()

上述代码的用例如下。

# 调整文档中的图片大小,并且使其居中,同时加入题注
python .\office05.py -f "d:\test\1.docx"

# 给表格加题注,并且使表格整体居中
python .\office05.py -t "d:\test\1.docx"

       上述代码中,使用本系列前文介绍的argparse标准库用来分析命令行参数。其中-f选项表示处理文档中的图片,-t选项表示处理文档中的表格。可以根据示例代码进行任意修改以适应自己的需求。例如将图片的宽与高进行自定义,调整对齐格式等。当大型docx文档中的图片数以千百计时,上述代码能够节省大量的时间精力,值得花些时间调整。​​​​

标签:Python,doc,app,parser,print,shape,文档,四十八,工具箱
From: https://www.cnblogs.com/shanxihualu/p/17972068

相关文章

  • Python第六小节 进行实战
    #方法一:lst=['88','89','90','98','00','99']foriinrange(len(lst)):#永昌成都直接遍历iflst[i]==0:lst[i]='200'+lst[i]else:lst[i]='19'+lst[i]print(lst)#......
  • Python自带的GUI库:Tkinter库使用手册(未完善)
    文章目录一、Tkinter是什么二、主窗口1、窗口的常用方法2、实例参考资料一、Tkinter是什么Tkinter(即tkinterface,简称“Tk”)本质上是对Tcl/Tk软件包的Python接口封装,它是Python官方推荐的GUI工具包,属于Python自带的标准库模块,当您安装好Python后,就可以直接使用它,而......
  • Python 图像查看器
    当然,这里是一个简洁而全面的介绍,适合用于在博客中介绍这个图像查看器程序:Python图像查看器在这篇博客中,我将向大家介绍一个由我开发的简单但功能强大的图像查看器。这个图像查看器是用Python编写的,利用了Tkinter图形用户界面库来提供直观的用户体验。它不仅可以浏览单个文件......
  • 【Python】解压压缩包(处理中文乱码问题)
    支持中文编码fromzipfileimportZipFiledefsupport_gbk(zip_file):name_to_info=zip_file.NameToInfo#copymapfirstforname,infoinname_to_info.copy().items():real_name=name.encode('cp437').decode('gbk')......
  • 使用pyinstaller打包python程序时报错UPX is not available
    使用pyinstaller打包python代码程序时报错:UPXisnotavailable原因是 python环境的Scripts文件夹内缺少了一个upx.exe的文件到官网https://github.com/upx/upx/releases/tag/v4.2.2中下载一个UPX,将下载文件解压后得到的upx.exe文件(解压后的所有文件里只要这一个文件即可,......
  • Python爬取B站视频 抓包过程分享
    B站对于很多人来说并不陌生,对于经常玩电脑的人来说,每天逛一逛B站受益匪浅。里面不仅有各种各样的知识库,就连很多游戏攻略啥的都有,真的是想要啥有啥。这么好用的平台得好好利用下。今天我将写一个爬虫程序专门抓取B站的视频,并且贴上详细的抓包过程。首先,我们需要安装requests库来发......
  • python 百分号输出
    python使用format()方法num=5print("{:.0%}".format(num/100))使用f-string需要python3.6以上版本num=5print(f"{num/100:.0%}")......
  • python创建httpserver,并处理get、post请求
    搭建一个简单的httpserver,用于测试数据通讯fromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerimportjsondata={'result':'thisisatest'}host=('localhost',8888)classResquest(BaseHTTPRequestHandler):  defdo_GET(self):   ......
  • Python Matplotlib 实现基础绘图
    ​ 1、Matplotlib的三层结构Matplotlib是一个用于在Python中创建二维图表的库。为了更好地理解和使用Matplotlib,重要的是要了解其三层结构:容器层(ContainerLayer)、辅助显示层(HelperLayer)和图像层(ArtistLayer)。这些层级构成了Matplotlib的绘图体系结构。1)容器层(Conta......
  • stable Diffusion python 运行时抛出一个异常
    Python中的异常处理引言在编程过程中,我们经常会遇到各种错误和异常情况。为了提高程序的稳定性和可靠性,我们需要对这些异常情况进行处理。在Python中,异常处理是一个非常重要且常用的功能。异常的概念异常是程序中不正常的情况,例如:文件不存在、数组越界、除零错误等。当异常发生......