因为项目需使用用了Python-Docx 。
项目需要web上的页面转成word并且需要自动添加页码。
document.add_section()
document.sections[0].header # 获取第一个节的页眉
document.sections[0].footer # 获取第一个节的页脚
这三行代码可以实现添加页眉页脚,再进行修改 不好用
生成的word页数不定 用这个不好使
复制代码
后来想到Python-Docx操作word,word原有的格式未操作它不会改变。就是首先创建一个空白的word在里边设置页眉页脚,当作模板。由新建文档改成编辑文档,直接操作这个设置好页眉页脚的文档,页脚的页码会自增。
由document = Document() # 新建文档
替换document = Document('test1.docx')
不过又出现一个问题,第一页有标题,直接操作自己新建的word首行会有换行。
那就要删除。。。。
虽然在python-docx中尚未实现Paragraph.delete(),但此处记录了一个解决方法函数:github.com/python-open…
def delete_paragraph(paragraph):
p = paragraph._element
p.getparent().remove(p)
p._p = p._element = None
复制代码
自己新建word有个大坑,因为我是先写的生成文字表格的代码,在此基础上增加的页码,原有代码表格设置了style,往新建的word中add_table会报错。
在Word中,大量预定义的段落样式会显示在样式库和选择列表中。 这些样式的属性是Word应用程序已知的,但是Word直到第一次使用它们时才在文档中实际存储这些样式中的任何一种。 之后,即使没有任何内容使用它们,他们也会留在该文档中。
解决方式一:
使用document = Document()生成文档(会加载所有样式),在这个文档上增加页眉页脚。类似方式,自己新建的word在里边先创建一个表格,在删除,保存后正常。 可能存在问题,如果是需要插入表格到一个没有插入过表格的word这并不适用!
解决方式二:
from docx.enum.style import WD_STYLE_TYPE
styles = document.styles
styles.add_style('Table Grid', WD_STYLE_TYPE.TABLE)
style = styles['Table Grid']
style.hidden = True
style.quick_style = True
复制代码
既然没有TableGridTable GridTableGrid那就自己在style里添加,不报错,生成word没有边框样式,自己添加 TableGridTable GridTableGrid,如果编辑有表格的word会出错,自己写判断吧,自己写样式吧。
还有什么办法没。。。。。。。。。。。。。