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