繁体   English   中英

如何在vaadin中打开生成的PDF?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM