Суть такова. Нужно создать программу, которая создает документ-спецификацию ГОСТ 2.108-68 ЕСКД. Причем все должно быть в точности, как в нижней картинке.

Я пробовал сделать по разному. К сожалению, у меня либо не получалось, либо же делает таблицу не так, как показано.
Могу скинуть пример кода. То неправильный размер, то ещё чего-нибудь.
import aspose.words as aw
def mm_to_points(mm):
return mm * 2.83 # 1 мм ≈ 2.83 пункта
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
# Шрифт ГОСТ
builder.font.name = "Arial"
builder.font.size = 10
# Верхние поля
builder.writeln("Перв. примен.: ___________________ Справ №: ________________ Подпись и дата: ________________")
builder.writeln("Инд. № дуб: _______________________ Взам. инв. №: ________________\n")
# Столбцы и размеры
columns = [
("Поз. обозн.", 20),
("ФВМТ.465255.012", 35),
("Наименование", 100),
("Кол.", 15),
("Примечание", 40)
]
# Начинаем таблицу
table = builder.start_table() # Это объект таблицы
# Добавляем хотя бы одну строку перед применением форматирования
builder.insert_cell() # Первая ячейка
builder.write(columns[0][0]) # Первая ячейка
# Теперь применяем настройки таблицы
table.allow_auto_fit = False
builder.row_format.height = mm_to_points(7)
builder.row_format.height_rule = aw.HeightRule.EXACTLY
builder.paragraph_format.alignment = aw.ParagraphAlignment.CENTER
builder.font.bold = True
# Продолжаем заголовок
for header, width_mm in columns:
builder.cell_format.width = mm_to_points(width_mm)
if header != columns[0][0]: # первую ячейку уже записали
builder.insert_cell()
builder.write(header)
builder.end_row()
# Тело таблицы
builder.font.bold = False
builder.paragraph_format.alignment = aw.ParagraphAlignment.LEFT
builder.row_format.height = mm_to_points(6)
for _ in range(15):
for _, width_mm in columns:
builder.insert_cell()
builder.cell_format.width = mm_to_points(width_mm)
builder.write("")
builder.end_row()
builder.end_table()
# Пробел перед подвалом
builder.writeln("\n")
# Основная надпись (нижняя часть)
builder.start_table()
builder.row_format.height = mm_to_points(6)
builder.font.size = 9
footer_data = [
("Изм.", 15),
("Лист", 20),
("Листов", 20),
("№ докум.", 60),
("Подп.", 20),
("Дата", 25),
("Разраб.", 40),
("Пров.", 30),
("Н.контр.", 30),
("Утв.", 30),
("Лит.", 15),
("Прижим", 30),
]
# Строка с названиями
for text, width_mm in footer_data:
builder.insert_cell()
builder.cell_format.width = mm_to_points(width_mm)
builder.write(text)
builder.end_row()
# Пустая строка
for _, width_mm in footer_data:
builder.insert_cell()
builder.cell_format.width = mm_to_points(width_mm)
builder.write("")
builder.end_row()
builder.end_table()
# Сохраняем
doc.save("spetsifikatsiya_gost_2108.docx")
Нужна помощь. Где что добавить?