【问题标题】:python docx align both left and right on same linepython docx在同一行左右对齐
【发布时间】:2015-05-07 04:36:29
【问题描述】:

这是我关于 SO 的第一个问题,在此先感谢大家的帮助。我对 python、python-docx 和一般编程很陌生。我正在开发一个 GUI 程序(使用 PyQt)来生成 docx 格式的合同。我有大部分工作,但这是我遇到的问题。我需要在同一行左右对齐文本。总之,我相信这是通过更改为右缩进并点击制表符,然后添加文本来完成的。但是,我无法弄清楚如何在 python-docx 中执行此操作。我试过了:

paragraph = document.add_paragraph()
paragraph.add_run('SOME TEXT')
paragraph.alignment = 0
paragraph.add_run('SOME OTHER TEXT')
paragraph.alignment = 2

但这没有用。我根据文档尝试了其他一些想法,例如枚举 WD_PARAGRAPH_ALIGNMENT,但没有任何效果。

这可以在 python-docx 中实现吗(我使用的是 0.8.5 版)?

感谢您的帮助!

【问题讨论】:

  • 根据我对 docx 的了解,我不认为它有能力做你想做的事(这是左对齐段落中的右对齐标签)。但是,您绝对仍然可以以编程方式执行此操作,您只需要深入研究一下 coms
  • 我真的希望不会是这样......作为这个东西的新手,我真的希望在这个阶段避免使用 COM 和 Win32 API 来处理这样一个简单的小程序......感谢不过你的答案!

标签: python alignment docx python-docx


【解决方案1】:

不确定您是否仍在寻找解决方案,但是...

我也在使用 python-docx 生成合同并遇到了同样的问题。在添加 right-aligned tab stop feature 之前,我的解决方法是将行格式化为表格,使用自定义表格样式。

  • 首先,打开一个文档('custom_styles.docx')并添加一个 1 行 2 列的表格。
  • 选择表格并添加新表格样式('CustomTable'),其中第一列左对齐,最后一列右对齐。 (我还通过将它们设置为“无”或将它们着色为白色来使边框不可见。)
  • 删除表格并保存文档,这将为您提供一个具有新“CustomTable”样式的空文档。

以下内容应该适用于创建看起来既左对齐又右对齐的线条:

from docx import Document

document = Document('custom_styles.docx')
table = document.add_table(1, 2, style='CustomTable')
table.cell(0,0).text = 'Left Text'
table.cell(0,1).text = 'Right Text'
document.save('new_document_name.docx')

对我来说最棘手的部分是弄清楚如何在 Word 中创建表格样式。

【讨论】:

  • 感谢您的回答..在构建程序时遇到问题(阅读一堆人在构建 docx 模块时遇到问题)我放弃并开始学习 C# 哈哈..我用模板和替换我在word文档中创建的变量,而不是使用模块为我构建文档..并不完美,但它有效(或多或少)..但是,我会将您的答案标记为最有帮助的,因为它看起来像一个很好的解决方法,直到实现该功能..再次感谢您的帮助!
【解决方案2】:

如果您要查找的是一个完全对齐的段落,这意味着它与左右两边的边距对齐,这是通过Paragraph.alignment 属性完成的:

from docx.enum.text import WD_ALIGN_PARAGRAPH
paragraph = document.add_paragraph('A paragraph of text ..')
paragraph.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY

如果您希望建立右对齐制表位,python-docx 尚不支持。您可以在此处在 GitHub 问题列表中添加功能请求:https://github.com/python-openxml/python-docx/issues

一个好的问题名称应该是“功能:制表位”。

【讨论】:

  • 谢谢,但要澄清一下,基本上该程序是用来创建 docx 格式的合同,所以我需要有下划线,人们可以在文档的每一面签署合同,在同一线。希望这是有道理的。似乎这可能是您提到的制表位,我可能会要求该功能。现在我可能不得不处理在我的运行中添加标签 (\t) 并且必须在创建 docx 后手动修复格式。再次感谢您的帮助!
猜你喜欢
  • 2015-08-13
  • 2013-05-22
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 2012-03-27
  • 2019-12-18
相关资源
最近更新 更多