gpt4 book ai didi

java - 如何使用 xdocreport 将 odt 转换为 docx?

转载 作者:搜寻专家 更新时间:2023-11-01 02:46:09 34 4
gpt4 key购买 nike

我使用 xdocreport 1.0.3,我想上传一个 odt 模板,对其进行处理,最后得到一个 docx 处理过的文档。我该怎么做?

我试过这个:

public void generateUserReport(long pcCaseId, long currentUserId) throws CMSException{
try {
InputStream is = new FileInputStream(CustomTemplate.TEMPLATES_PATH + "test.odt");
IXDocReport report;
report = XDocReportRegistry.getRegistry().loadReport(is,TemplateEngineKind.Velocity);
IContext context = report.createContext();

FieldsMetadata metadata = new FieldsMetadata();
metadata.addFieldAsImage("signature");
metadata.addFieldAsImage("logo");

Date currentDate = new Date();
SimpleDateFormat df = new SimpleDateFormat("MM/dd/YYYY");
context.put("currentDate", df.format(currentDate));

User user = this.userDAO.loadUser(currentUserId);
byte[] signatureByteArr = user.getSignature();
context.put("userName", user.getFullName());

//TODO If exists signature, it will be added, in other case?
if (signatureByteArr!=null){
FileOutputStream fos = new FileOutputStream(CustomTemplate.TEMPLATES_PATH + "signature.jpg");
report.setFieldsMetadata(metadata);
fos.write(signatureByteArr);
FileImageProvider signature = new FileImageProvider(new File(CustomTemplate.TEMPLATES_PATH,"signature.jpg"));
context.put("signature", signature);
}else{
FileImageProvider noImage = new FileImageProvider(new File(CustomTemplate.TEMPLATES_PATH, "1px.gif"));
context.put("signature", noImage);
}

FileImageProvider logo = new FileImageProvider(new File("TEMPLATES_PATH, logo.gif"));
context.put("logo", logo);

OutputStream out = new FileOutputStream(new File(CustomTemplate.TEMPLATES_PATH, "OutPut.docx"));
report.process(context, out);
System.out.println("Success");
} catch (IOException e) {
System.out.println("IO exception");
} catch (XDocReportException e) {
System.out.println("XDocException");
e.printStackTrace();
}
}

我得到一个 OutPut.docx,但“事实上”它是一个 odt 文档,Microsoft Office 无法在没有错误详细信息的情况下打开它。 OpenOffice 打开它没有任何问题。

最佳答案

简而言之,XDocReport 不支持 odt->docx 转换器

您使用 report.process 这意味着没有转换(docx 模板->docx 报告,odt 模板->odt 报告)。在您的示例中,生成的报告是一个 odt(即使您将文件名设置为 docx 扩展名),这就是为什么 OpenOffice 可以打开它,尽管 MS Word 无法打开它。

如果您希望将报告转换为其他格式,如 html、pdf,您必须使用 report.convert 但在您的情况下,您需要一个 XDocReport 不提供的 docx->odt 转换器。但由于 XDocReport 是模块化的,您可以开发自己的 docx->odt 转换器并将其插入 XDocReport。

关于java - 如何使用 xdocreport 将 odt 转换为 docx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21599083/

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