python-dox 总结

本文档总结了使用Python-Dox过程中遇到的问题与解决方案,包括字体设置(新文件有效,追加失效)、页脚设置、居中设置、表格样式调整、表格数据的两种渲染方法(效率优化)以及如何修改表格字体和添加水印(利用Java实现)。提供了一个综合案例,涵盖所有技巧。
摘要由CSDN通过智能技术生成

1 .字体设置

from docx import Document
from docx.oxml.ns import qn#设置字体
document=Document()
#document=Document(r'./scan.docx')
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
document.add_paragraph('APPSACN漏洞级别:分为高危、中危、低危、参考等四级',style='List Bullet')
document.save("test.docx")

代码遗留问题,针对新建的文件字体设置有效,追加的文档就失效。暂时还没有想到怎么解决。有大佬解决的留下评论。
2.页脚设置

 document.sections[0].footer.paragraphs[0].text= '\t这里是页脚文字\t'

3.居中设置

center=document.add_heading('安全扫描平台安全评估报告',0)#数字为添加下划线
paragraph_format =center.paragraph_format
paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER

4,表格样式,更改style 风格即可, 可参考链接https://blog.csdn.net/xtfge0915/article/details/83480120

document.add_table(3,4,style='Medium Grid 1 Accent 1')

5 表格数据渲染方法一 ( 缺点数据较多时写入速度慢)

table = document.add_table(rows=1, cols=3) #插入表格
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
  row_cells = table.add_row().cells
  row_cells[0].text = str(item.qty)
  row_cells[1].text = str(item.id)
  row_cells[2].text = item.desc

6,表格数据渲染方法一二 解决效率问题,一次性插入数据。后续优化问题表头第一行标题添加进去的

table = document.add_table(rows=int(count)+1, cols=3, style="Medium Grid 1 Accent 1")
table_cells = table._cells
a=(('QTY',"Id",'Desc'),)#单独写的一行,单独生成表格的第一行,没找到更好实现方式生成第一行标题
TASK=-1
recordset=a+recordset
if int(count)>0:
   for item  in recordset:
       TASK+=1
       row_cells = table_cells[TASK * 3:(TASK + 1) * 3]
       row_cells[0].text = str(item.qty)
       row_cells[1].text = str(item.id)        
       row_cells[2].text = item.desc
           

7:修改表格字体设置,表格生成完毕后 调用此函数即可

def change_size(table):
    # 修改字体
    for row in table.rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                for run in paragraph.runs:
                    run.font.name = '宋体'  # 英文字体设置
                    run._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')

8:给world添加水印,本人找了很久没有找到利用python给word生成水印的方法。实现方式通过python调用java实现的。java添加水印能够实现。

def WaterMark(jar_path,text,docx_path,save_path,font):
    """
    基本的开发流程如下:
    ①、使用jpype开启jvm
    ②、加载java类
    ③、调用java方法
    ④、关闭jvm(不是真正意义上的关闭,卸载之前加载的类)
    """
    # ①、使用jpype开启虚拟机(在开启jvm之前要加载类路径)
    # 加载刚才打包的jar文件
    jarpath = os.path.join(os.path.abspath("."),jar_path )
    # 获取jvm.dll 的文件路径
    jvmPath = jpype.getDefaultJVMPath()
     # 开启jvm
    if not jpype.isJVMStarted():#这个判断非常重要,因为JVM在一个进程内就会自动关闭,后面在调用就会报错
        try:
            jpype.startJVM(jvmPath,"-ea", "-Djava.class.path=%s" % (jarpath))
        except:
            pass
    # ②、加载java类(参数是java的长类名)
    javaClass = jpype.JClass("waterMark.WaterMarkUtil")#参数java类名。
    # ③、调用java方法
    javaClass.InsertTextWatermark
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值