如何在 Libre/Open Office 中使用 pyUNO 库检查段落调整?

Posted

技术标签:

【中文标题】如何在 Libre/Open Office 中使用 pyUNO 库检查段落调整?【英文标题】:How to check paragraph adjustment using pyUNO library in Libre/Open Office? 【发布时间】:2015-03-13 13:55:48 【问题描述】:

com.sun.star.style.Paragraphproperties 服务支持该属性 ParaAdjust,支持来自 com.sun.star.style.ParagraphAdjust 的 5 个值 (ParagraphProperties,ParagraphAdjust)。

要设置值,可以使用以下两种方法之一:

cursor.ParaAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
cursor.setPropertyValue('ParaAdjust', com.sun.star.style.ParagraphAdjust.RIGHT)

要检查第一次尝试的值是:

if cursor.ParaAdjust == com.sun.star.style.ParagraphAdjust.RIGHT:
    ...

但没用。

检查:

type(cursor.ParaAdjust)
----> <class 'int'>
type(com.sun.star.style.ParagraphAdjust.RIGHT)
----> <class 'uno.Enum'>

是的,我假设这些是常量(请参阅下面的注释),这是我的错。

现在,uno.Enum 类有两个属性typeNamevalue,所以我试过了:

if cursor.ParaAdjust == com.sun.star.style.ParagraphAdjust.RIGHT.value:
    ...

但也没有用!

检查:

type(com.sun.star.style.ParagraphAdjust.RIGHT.value)
----> <class 'string'>
print(com.sun.star.style.ParagraphAdjust.RIGHT.value)
----> 'RIGHT'

设置ParaAdjust属性,然后打印它的实际值,我得到:

LEFT    = 0
RIGHT   = 1
BLOCK   = 2
CENTER  = 3
STRETCH = 0
(note that STRETCH is considered as LEFT,
 a bug or something not implemented?)

所以:

这些值在哪里定义? 如何使用 UNO API 获取这些值? 我是否遗漏了官方文档中的某些内容?

注意

在 LibreOffice 4.0(也可能在旧版本中)中,您可以通过以下方式获取此值:

uno.getConstantByName('com.sun.star.style.ParagraphAdjust.RIGHT')

从 4.1 版开始,它不再工作了(正确的,不是一个常数)。

【问题讨论】:

【参考方案1】:

感谢来自 OpenOffice 论坛 (link) 的“hanya”,这里有一些用于映射 ParagraphAdjust 值的 python 代码:

def get_paragraph_adjust_values():
    ctx = uno.getComponentContext()
    tdm = ctx.getByName(
            "/singletons/com.sun.star.reflection.theTypeDescriptionManager")
    v = tdm.getByHierarchicalName("com.sun.star.style.ParagraphAdjust")
    return name : value
            for name, value
            in zip(v.getEnumNames(), v.getEnumValues())

在 python 2.6 中,不支持字典的理解语法,可以使用 dict() 函数。

【讨论】:

以上是关于如何在 Libre/Open Office 中使用 pyUNO 库检查段落调整?的主要内容,如果未能解决你的问题,请参考以下文章

在 Open/Libre/Neo Office 中查找文本选择中的段落的宏

如何使用已安装的 Office 版本在 WinForms 应用程序中查看 Microsoft Office 文档?

如何安装免费正版office2016?

如何在 C# 中读取 excel 文件而不使用 Microsoft.Office.Interop.Excel 库

如何在 C# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?

如何在 libre office basic 中使用模块?