为什么buildReport()在Aspose(Java Words)中组装了一个无效的超链接?

问题描述 投票:0回答:1

我正在使用 Aspose (Java) 和 LINQ 报告语法来动态构建报告。这篇文档解释了如何在文档中插入超链接。通常,它看起来像这样

<<link [uri_or_bookmark_expression] [display_text_expression]>>

最后一段指出“在构建报告时...”,我将其解释为正在执行buildReport()。出于显而易见的原因,我们无论如何都需要执行 buildReport。但是我们使用 buildReport() 时的输出是无效的,因此没有正确转换为 Word 文档中的超链接。

_engine = new ReportingEngine();
_engine.getKnownTypes().add(Helper.class);
_engine.setOptions(ReportBuildOptions.ALLOW_MISSING_MEMBERS | ReportBuildOptions.REMOVE_EMPTY_PARAGRAPHS);
Document document = new Document;
DocumentBuilder builder = new DocumentBuilder(document);

builder.writer("<<link LinkLabel>>");
//document.getText(): <<link LinkLabel>>
_engine.buildReport(document, dataSource, "NewDoc");
//document.getText() now: HYPERLINK \l "LinkLabel" 

建造前:

<<link LinkLabel>>

构建后:

HYPERLINK \l "LinkLabel"

所以看起来尝试将 LINQ 报告语法转换为 Word 友好代码。但是 Word 友好的结果是无效的。 当我在 Word 中手动创建超链接时,它会生成以下代码(当我使用 Alt+F9 显示它时):

{ HYPERLINK \l "LinkLabel" }
。因此,在 buildReport 中似乎去掉了波浪形括号({ 和
}
)。为什么要放弃它们?还是我的一个/一些假设不对?

java linq aspose aspose.words
1个回答
0
投票

LinkLabel
在你的表达式中应该用方括号括起来。所以构建报告之前的表达式应该是这样的:

<<link [LinkLabel]>>

其中

LinkLabel
是包含 url 或书签名称的变量名称。例如看下面的代码:

Document document = new Document();
DocumentBuilder builder = new DocumentBuilder(document);
builder.write("<<link [LinkLabel]>>");
    
ReportingEngine engine = new ReportingEngine();
engine.buildReport(document, "https://www.aspose.com/", "LinkLabel");
    
document.save("C:\\Temp\\out.docx");

在这种情况下,url 也用作显示的文本。如果需要使用不同的值作为显示文本,则应使用第二个参数:

Document document = new Document();
DocumentBuilder builder = new DocumentBuilder(document);
// Define variables with url and displayed text.
// In real case the data will come from your data source.
builder.write("<<var [url=\"https://www.aspose.com/\"]>>");
builder.write("<<var [displayed_text=\"Link To Aspose Web Site\"]>>");
builder.write("<<link [url] [displayed_text]>>");
    
ReportingEngine engine = new ReportingEngine();
engine.buildReport(document, new Object());
    
document.save("C:\\Temp\\out.docx");
© www.soinside.com 2019 - 2024. All rights reserved.