python docx 上的布局问题

Trouble with layout on python docx

在堆栈溢出的帮助下,我构建了这段代码:

from docx import Document

names = ["names1, names2, names3, names4"]
names = ' '.join(names)
dates = ["October 25 2021"]
dates = str(dates)
client = ['client']
client = str(client)

document = Document('filename.docx')

paragraphs = document.paragraphs


paragraph = paragraphs[0].insert_paragraph_before()

paragraph.add_run("       ")
run = paragraph.add_run("To")
run.italic = True
paragraph.add_run("    " + names + "         ")
run = paragraph.add_run("Date")
run.italic = True
paragraph.add_run("  " + dates + "       ")

paragraph.add_run("                                                        ")
paragraph.add_run("Doc 1")
paragraph.add_run("                                                           ")
paragraph.add_run("                                                           ")
run = paragraph.add_run("From")
run.italic = True
paragraph.add_run("    " + names + "         ")
run = paragraph.add_run("Ref")
run.italic = True
paragraph.add_run("  " + client)
paragraphs[0].insert_paragraph_before("                                                                                     ")


document.save('new.docx')

我得到了:

但我想要这样的东西:

但是我做不到这个布局。我添加了空格等等,但它根本没有跟随,所以我必须遗漏一些东西。

有什么想法吗?

您有两种选择,一种是使用制表位,另一种是使用 table。

您可能想在 Word UI 中进行简短的实验,看看这两个是如何完成的。那么工作就是如何在 python-docx.

中重新创建该过程

使用制表位方法(这是我的首选),您需要四个制表位。文本类似于“制表符,“收件人”,制表符,“姓名,姓名,...”,制表符,“日期”,制表符,“十月...”。第一个制表位是右制表符,对齐“to”的结尾可能是 .75" 或其他任何地方,然后是左对齐的制表位以对齐名称,右对齐的是“日期”,左对齐的是日期本身。

使用 table,您只有两行,每行四个单元格,并相应地左右对齐单元格并调整单元格宽度以适应。我不确定你是如何关闭 python-docx 中的单元格边框的,但我希望它是 table 样式选择。

table 方法的一个优点是一行中放不下的姓名列表会自动换行。在选项卡方法中,如果名称 运行 太长,它只会搞砸格式。