gpt4 book ai didi

java - LibreOffice UNO : Setting Styles (anwer can be provided in Java, VB、Python、C++,任何使用 UNO API 的语言)

转载 作者:行者123 更新时间:2023-11-29 08:52:46 25 4
gpt4 key购买 nike

我有一个问题,我只是尝试添加新文本,然后对其应用 LibreOffice 样式。我想添加文本并使其遵循特定样式(“标题 1”、“标题 2”等)。

向文档添加文本确实有效,更改样式也有效,但最后的样式集应用于整个文档,而不仅仅是最后一个字符串。我需要一些方法来限制对字符串的选择。我想我需要一个 XTextRange 并且样式属于它而不是光标......但不知道如何创建只包含我最新的字符串的新 XTextRanges......显然不确定,并且非常欢迎提供建议。

编辑:虽然以下代码是用 Java 编写的,但我更愿意接受使用任何编程语言的解决方案,UNO API 非常相似,我可以从另一种语言转换解决方案。我感觉面向 OOo/LO 的 VB 宏编写者比 Java 开发人员多,然后也许 C++ 或 Python 开发人员有解决方案。我应该认为写出改变样式的文档将是一个非常基本的要求!

com.sun.star.text.XText xText = this.xDoc.getText();
//create a cursor object
com.sun.star.text.XTextCursor xTCursor = xText.createTextCursor();
this.writeResume(xText, xTCursor);

写简历的方法...你会看到我尝试用changeStyle方法改变样式的地方

private void writeResume(com.sun.star.text.XText xText, com.sun.star.text.XTextCursor xTCursor) {
TestData resume = new TestData();
List<Company> companies = resume.getCompanies();
this.changeStyle(xTCursor, "Heading 1");
xText.insertString(xTCursor, "Professional Experience\n", false);
xTCursor.collapseToEnd();
this.changeStyle(xTCursor, "Heading 2");
Company company = companies.get(0);
String date = dformat.format(company.getStartDate().getTime()) + " - " + dformat.format(company.getEndDate().getTime());
xText.insertString(xTCursor, company.getName() + "," + company.getLocation() + "\t" + date + "\n", false);
xTCursor.collapseToEnd();
this.changeStyle(xTCursor, "Heading 3");
xText.insertString(xTCursor, "Test Point 1\n", false);
xText.insertString(xTCursor, "Test Point 2\n", false);
xText.insertString(xTCursor, "Test Point 3\n", false);
}

改变风格的方法

public void changeStyle(com.sun.star.text.XTextCursor xTCursor, String styleName) {
XPropertySet xCursorProps = UnoRuntime.queryInterface(XPropertySet.class, xTCursor);
try {
xCursorProps.setPropertyValue("ParaStyleName", styleName);
} catch (UnknownPropertyException | PropertyVetoException | IllegalArgumentException | WrappedTargetException ex) {
Logger.getLogger(ResumeWriter.class.getName()).log(Level.SEVERE, null, ex);
}
}

最佳答案

通过反复试验解决了问题:

要点:

仅更改了以下方法:

private void writeResume(com.sun.star.text.XText xText, com.sun.star.text.XTextCursor xTCursor) {
TestData resume = new TestData();
List<Company> companies = resume.getCompanies();
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
this.changeStyle(xTCursor, "Heading 1");//if this line is NOT here then will default to a custom style
xText.insertString(xTCursor, "Professional Experience\n\r", false);
xTCursor.collapseToEnd();
//xText.insertControlCharacter(xText, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, false);
this.changeStyle(xTCursor, "Heading 2");//if this line is NOT here then will default to a custom style
Company company = companies.get(0);
String date = dformat.format(company.getStartDate().getTime()) + " - " + dformat.format(company.getEndDate().getTime());
xText.insertString(xTCursor, company.getName() + "," + company.getLocation() + "\t" + date + "\r", false);
xText.insertString(xTCursor,"Title\r", false);

this.changeStyle(xTCursor, "Heading 3");//if this line is NOT here then will default to a custom style
xText.insertString(xTCursor, "Test Point 1\r", false);
this.changeStyle(xTCursor, "Heading 3");
xText.insertString(xTCursor, "Test Point 2\r", false);
this.changeStyle(xTCursor, "Heading 3");
xText.insertString(xTCursor, "Test Point 3\r", false);
}

关于java - LibreOffice UNO : Setting Styles (anwer can be provided in Java, VB、Python、C++,任何使用 UNO API 的语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21898500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com