字体和表格python docx模块的问题



Python=3.8.3Python Docx=0.8.10

我目前正试图通过编写我的第一个项目来为我的妻子做一份礼物/惊喜,该项目将通过自动化她的写作评估来减轻她的工作量(目前从6个月开始学习python(。

长话短说,她正在根据不同能力的分数对word文档进行评估。我的想法是让输入模板按能力倾向(A、B、C、D……(排序,每个模板都包含根据分数(低分、平均分、高分(的文本块。

我做了一些研究,找到了python Docx模块,我可以使用它将输入文档模板的副本自动化为最终输出文档。

在做我的项目时,我目前面临两个大问题,第一,我无法保留她使用的原始字体(标题为Helvetica,文本为Garamond(,第二个问题是,她的文档中有一些表我也无法复制。

到目前为止,我成功地根据标记复制了正确的文本块,并保留了粗体、斜体和下划线,但没有保留字体和表格。

我一直在网上阅读python docx手册,但我真的不知道在哪里可以修复这2个。

这是我的代码示例:

import os
import sys
from docx import Document
from docxtpl import DocxTemplate
# Imports
inputM01acgti = Document(
'/home/rvera/ubuntuShare/python_Projects/docx_tpl/M-01-ACG-TI-02.docx')

# Output document
output_doc = Document()

# Function to get proper format of original templates
def get_para_data(output_doc_name, paragraph):
output_para = output_doc_name.add_paragraph()
for run in paragraph.runs:
output_run = output_para.add_run(run.text)
# Run's bold data
output_run.bold = run.bold
# Run's italic data
output_run.italic = run.italic
# Run's underline data
output_run.underline = run.underline
# Run's color data
output_run.font.color.rgb = run.font.color.rgb
# Run's font data
output_run.style.name = run.style.name
# Paragraph's alignment data
output_para.paragraph_format.alignment = paragraph.paragraph_format.alignment

# Function for Male Assement
def maleAssement():
print('Aptitude Cognitive Globale')
acgMark = int(input('Please enter a number: '))
if 0 <= acgMark < 2:
paragraphs_acg = inputM01acgti.paragraphs
elif 2 <= acgMark < 16:
paragraphs_acg = inputM01acgmi.paragraphs
elif 16 <= acgMark < 86:
paragraphs_acg = inputM01acgm.paragraphs
elif 16 <= acgMark < 98:
paragraphs_acg = inputM01acgms.paragraphs
elif 98 <= acgMark <= 100:
paragraphs_acg = inputM01acgts.paragraphs
else:
print('Your number is not between 0 and 100, try again..')
for para in paragraphs_acg:
get_para_data(output_doc, para)

正如你所看到的,为了保持输入文档的风格,我正在进行不同的运行,但我在字体和表格上有所遗漏。

有人能帮我吗?

非常感谢!

Xzi。

以下是保持字体和字号的正确方法:

# Function to get proper format of original templates

def get_para_data(output_doc_name,段落(:

output_para = output_doc_name.add_paragraph()
for run in paragraph.runs:
output_run = output_para.add_run(run.text)
# Run's bold data
output_run.bold = run.bold
# Run's italic data
output_run.italic = run.italic
# Run's underline data
output_run.underline = run.underline
# Run's color data
output_run.font.color.rgb = run.font.color.rgb
# Run's font
output_run.font.name = run.font.name
# Run's font size
output_run.font.size = run.font.size
# Run's font data
output_run.style.name = run.style.name
# Paragraph's alignment data
#output_para.style = paragraph.style
#output_para.alignment = paragraph.alignment
output_para.paragraph_format.alignment = paragraph.paragraph_format.alignment
#output_para.paragraph_format.widow_control = paragraph.paragraph_format.widow_control

最新更新