我正在构建一个项目,从不同的URL下载多个PDF文件,将它们合并为一个并下载。
我正在尝试使用Vaadin的FileDownloader
来实现这一目标:
final FileDownloader fileDownloader = new FileDownloader(new FileResource(resultResource.getFile()));
fileDownloader.extend(download);
resultResource
是我要下载的生成的PDF。
现在问题是生成PDF需要很短的时间,因此有时下载发生在新文件生成之前,导致它下载旧文件或空文件。
所以我一直想做的就是这样:
download.addClickListener(e -> {
try {
// This creates the new PDF
pdfConverter.manipulatePdf(storeNumber.getValue());
fileDownloader.download();
} catch (...) {
...
}
});
但到目前为止没有任何成功。有什么办法可以这样吗?要禁用“自动”下载并手动触发它?
答案 0 :(得分:1)
您可以尝试两种方法
第一种方法是重构您的UI,以便在您进入视图时开始生成该PDF文件,并在完成后启用下载按钮。如果可行,您可以使用其他指标,如进度条。
在Vaadin 8.4+中,您还可以通过扩展EventTrigger(请参阅拉取请求https://github.com/vaadin/framework/pull/10478)和API规范https://vaadin.com/download/release/8.4/8.4.2/docs/api/com/vaadin/server/EventTrigger.html来设置FileDownloader。如果第一种方式不适合您,可能会被利用。