show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- document文档 是 顶级元素
- document文档 包含 多个 prargraph段落
- prargraph段落 包含 多个 run文本
- 文本可以设置颜色
- 主题颜色 配合 亮度、暗度
- 如何设置中文字体呢?🤔
- 选中段落
- 设置字体
- 找到 中文字体
- 设置 文泉驿点阵正黑
- 然后选中 中文部分
- 如何 从python中观察到中文字体呢?
- 搜索到 提取中文字体的方式
- 与font.name不同
from docx import Document
doc = Document('oeasy.docx')
paragraph = doc.paragraphs[0]
run = paragraph.runs[0]
font = run.font
print(font.name)
rPr = font.element.rPr
rFonts = rPr.rFonts
print(f"亚洲字体: {rFonts}")
- 结果
- 这个rFonts到底是什么呢?
- 看起来像一个字典
- 尝试遍历
from docx import Document
doc = Document('oeasy.docx')
paragraph = doc.paragraphs[0]
run = paragraph.runs[0]
font = run.font
print(font.name)
rPr = font.element.rPr
rFonts = rPr.rFonts
for key,value in rFonts.items():
print(key,value)
- 结果
- 查找到了 中文字体
- 但这都怎么理解呢?
- openxml 是什么意思?
- xml 应该是
- extensible markup language
- https://schamas.openxmlformats.org
- https://schamas.openxmlformats.org/wordprocessingml/2006/main
- 线索全部中断
vi oeasy.docx
- 尝试直接打开
- oeasy.docx本质是一个zip包
- 可以给他解压缩吗?
ls -l oeasy.docx
unzip -d oeasy oeasy.docx
- 尝试将oeasy.docx
- 作为一个zip包
- 进行解压缩
cd oeasy
ls
cd word
ls
- 查看效果
firefox document.xml
- 查看文档
- w:p 就是 paragraph
- w:r 就是 run
- w:r 中有 w:rPr
- 里面有w:fonts
- 分别设置了中文和英文字体
- 使用python的话
- 如何设置这个中文字体呢?
- 修改默认样式
from docx import Document
from docx.oxml.ns import qn
document = Document()
document.add_paragraph("我是oeasy")
document.styles["Normal"].font.name = "Lato"
document.styles["Normal"].element.rPr.rFonts.set(qn("w:eastAsia"), u"文泉驿点阵黑")
document.save("oeasy.docx")
- 直接打开 oeasy.docx
- 直观观察
- 中文字体已经设置
- 观察 默认样式的
- 确实已经设置
- 能从 xml中观察到吗?
- 这次打开的
- 不是 document.xml
- 而是 styles.xml
ls -l oeasy.docx
unzip -d oeasy oeasy.docx
cd oeasy/word
firefox styles.xml
- 找到Normal字体样式
- 确实 字体 已经修改
- 如果我新建 一个样式
- 会在styles.xml中体现吗?
- 这次 全面自动化
- unzip
- 打开xml
- 都设置好
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
import subprocess
document = Document()
styles = document.styles
paragraph = document.add_paragraph("oeasy")
run = paragraph.add_run("o2z")
style = styles.add_style('oeasy',WD_STYLE_TYPE.CHARACTER)
style.font.italic = True
run.style = style
print("style.font.italic",style.font.italic)
print("run.font.italic",run.font.italic)
document.save("oeasy.docx")
command = "yes | unzip -d oeasy oeasy.docx"
result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
command = "firefox oeasy/word/styles.xml"
result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
print(result.stdout)
if result.stderr:
print(result.stderr)
- 查看结果
- 确实找到了
- 新建的样式oeasy
- 并且oeasy里面
- 设置了italic
- document.xml
- 是如何应用oeasy样式的呢?
firefox document.xml
- 可以看到
- o2z的样式
- 是oeasy
- 如果修改xml
- 再压缩成zip形式的docx
- 就能修改文档吗?
- 修改文档
cd oeasy/word
vi document.xml
- :set wrap
- 控制自动换行
- /o2z
- 找到o2z位置
- 将o2z修改为
- o2zo3z
- 然后保存
- 进入文件夹
cd oeasy
- 将 文件夹中
- 所有文件夹 中的内容
- 递归地 压缩到docx
zip -r o3z.docx *.* customXml docProps _rels word
- 得到o3z.docx
- 查找libreoffice位置
whereis libreoffice
- 使用libreoffice打开
- 新压缩的文档
/usr/bin/libreoffice o3z.docx
- 结果
- 确实将o3z作为文本
- 插入到了 文档中
- 这次
- 从 设置中文文本 字体开始
- 观察到了 docx的 结构
- docx
- 本质上是一个zip压缩包
- 可以 解压出 相关文件夹和文件
文件 | 作用 |
---|---|
word/document.xml | 文档内容 |
word/styles.xml | 负责样式 |
- 我们
- 可以解压docx
- 也可以编辑xml文件
- 然后压缩进入docx
- 目前学习到的样式
- 都是 以字体为基础的
- 能否 有以段落为基础的样式 呢?
- 我们下次再说!👋🏻