Проблемы с модулем font и table python -docx - PullRequest
0 голосов
/ 06 августа 2020

Python = 3.8.3 Python -Docx = 0.8.10

В настоящее время я пытаюсь сделать подарок / сюрприз для моей жены, написав свой первый проект, который облегчил бы ее рабочую нагрузку за счет автоматизации ее письменных оценок (в настоящее время изучает python с 6 месяцев).

Короче говоря, она пишет тесты на документах Word docx, основываясь на оценках разных способностей. Моя идея состоит в том, чтобы сделать шаблон ввода отсортированным по Aptitude (A, B, C, D ...), и каждый шаблон будет содержать блок текста в соответствии с оценкой (низкий балл, средний, высокий балл).

Я провел небольшое исследование и обнаружил модуль python -Docx, который я мог бы использовать для автоматизации копирования шаблона моего входного документа в окончательные выходные документы.

Выполняя свой проект, я Сейчас у меня две большие проблемы: во-первых, я не могу сохранить исходный шрифт, который она использует (Helvetica для заголовков и Garamond для текста), вторая проблема в том, что в ее документах есть таблицы, которые я не могу скопировать либо.

До сих пор мне удалось скопировать правильный блок текста в соответствии с отметкой, а также сохранить полужирный шрифт, itali c и подчеркивание, но не шрифт и таблицы.

I Я читал онлайн-руководство по 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)

As Вы можете видеть, что я прохожу через разные пробежки чтобы сохранить стиль моего входного документа, но мне не хватает шрифта и таблиц.

Кто-нибудь может мне в этом помочь?

Большое спасибо!

Xzi .

1 Ответ

0 голосов
/ 10 августа 2020

Вот правильный способ сохранить шрифт и размер шрифта:

# 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
    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
...