[英]How to open a generated PDF in vaadin?
在我的vaadin应用程序中,我有一个带有附加列的Table
,其中包含打印Button
。 Button
调用以下util方法来创建pdf并在新窗口中打开它( ui
参数是按钮):
public static void printPDF(Offer offer, AbstractComponent ui) throws IOException, DocumentException, TemplateException {
// ... create PDF
FileResource resource = new FileResource(pdfFile);
BrowserWindowOpener opener = new BrowserWindowOpener(resource);
opener.setFeatures("");
opener.extend(ui);
}
现在,第一次单击该按钮不起作用。 第二次单击它有效。 第三次单击它,将打开两个窗口。 每次点击增加。
我也想使用上下文菜单打开pdf
table.addActionHandler(new Handler()...
我什至没有按钮可以扩展。 我宁愿不使用.extend()
部分,而只是打开一个新窗口。 我怎样才能做到这一点?
编辑 :这阻止了从打开多个实例的按钮,仍然不是一个好的解决方案,并且第一次单击不起作用。
Collection<Extension> extensions = ui.getExtensions();
for (Extension e : extensions) {
if (e instanceof BrowserWindowOpener) {
((BrowserWindowOpener) e).setResource(resource);
return;
}
}
我想我会需要创建一个BrowserWindowOpener
为每个打印Button
在我的Table
。
这不是一个很干净的解决方案,该表可能包含很多行,这些行会创建很多BrowserWindowOpener
实例,这些实例将永远不会使用。 上下文菜单问题也无法解决。
EDIT2:这是我尝试的另一个解决方案:
ResourceReference rr = ResourceReference.create(resource, ui, "print");
Page.getCurrent().open(rr.getURL(), "blank_");
在这里,我得到以下错误:
按钮(175)无法处理连接器对print / 2016_9090_R_1634500091131558445.pdf的请求
您可以使用FileDownloader来实现所需的功能。
FileResource resource = new FileResource(pdfFile);
FileDownloader downloader = new FileDownloader(resource);
Button pdf= new Button("Download PDF");
downloader.extend(pdf);
使用此代码
Window window = new Window();
((VerticalLayout) window.getContent()).setSizeFull();
window.setResizable(true);
window.setCaption("Exemplo PDF");
window.setWidth("800");
window.setHeight("600");
window.center();
StreamSource s = new StreamResource.StreamSource() {
@Override
public InputStream getStream() {
try {
File f = new File("C:/themes/repy.pdf");
FileInputStream fis = new FileInputStream(f);
return fis;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
};
StreamResource r = new StreamResource(s, "repy.pdf", mainLayout.getApplication());
Embedded e = new Embedded();
e.setSizeFull();
e.setType(Embedded.TYPE_BROWSER);
r.setMIMEType("application/pdf");
e.setSource(r);
window.addComponent(e);
getMainWindow().addWindow(window);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.