我有各种文本文档(.odt,.doc)等,它们用作模板,使用Java填充文本。为了实现这一点,我在要插入文本的每个位置上都将TextFields添加到文档中,并枚举TextFields集合并为其分配值。但是,我真正想做的是,因为这些文档仅用于打印,所以能够使用书签而不是TextFields(当不填充时,TextFields仍然为空并且看上去很有趣)。但是,无论何时尝试检索文档的XBookmarksSupplier时,我手动在文档模板上插入多少个书签,我都会得到一个空值,即


XBookmarksSupplier书签Supplier =(XBookmarksSupplier)
UnoRuntime.queryInterface(XBookmarksSupplier.class,document);


一片空白。参数document是通过以下方式创建用作模板的文档的内存副本而获得的XComponent:

XComponentLoader loader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, desktop);

List<PropertyValue> props = new ArrayList<PropertyValue>();
PropertyValue p = null;

p = new PropertyValue();
p.Name = "AsTemplate";
p.Value = new Boolean (true);
props.add(p);

p = new PropertyValue();
p.Name = "DocumentTitle";
p.Value = "New doc";
props.add(p);

p = new PropertyValue();
p.Name = "Hidden";
p.Value = new Boolean(true);
props.add(p);

PropertyValue[] properties = new PropertyValue[props.size()];
props.toArray(properties);

XComponent document = null;

String templateFileURL = filePathToURL(templateFile);
document = loader.loadComponentFromURL(templateFileURL, "_blank", 0, properties);

最佳答案

好吧,终于我明白了。通过使用Eclipse自动建议,我错误地导入了com.sun.star.sdb.XBookmarksSupplier而不是正确的Class com.sun.star.text.XBookmarksSupplier。由于各种复制粘贴我的所有测试使用相同的错误类。

07-28 00:47