gpt4 book ai didi

java - 如何从 vaadin 7 中的流打印 pdf 文件?

转载 作者:行者123 更新时间:2023-11-30 07:13:21 31 4
gpt4 key购买 nike

我正在尝试使用 Apache FOP + xsl 直接从 vaadin 7 中的流打印 pdf。目前我可以成功创建新的 xml 文档并使用 xsl fo 从中重新生成 pdf 文件。我将文件保存到服务器,一切看起来都很好。

我的问题是无法将文件保存到服务器,因此我需要将其读取到某种字节数组,然后在用户单击“打印”按钮时将其打开。

out = new java.io.FileOutputStream(
"/testPrint.pdf");

try {
// Construct fop with desired output format
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

// XSL
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer =
factory.newTransformer(new StreamSource("printTemplate.xsl"));

Result res = new SAXResult(fop.getDefaultHandler());

//xml->xsl-fo-->pdf
transformer.transform(xml, res);
} finally {
out.close();
}

当用户单击打印按钮时,当我从服务器检查时,生成的 pdf 文档看起来不错。

 print.addClickListener(new ClickListener() {

@Override
public void buttonClick(ClickEvent event)
{
PdfComponent pdf = new PdfComponent(lang, bookingDto);

try {
DOMSource xml = pdf.getXMLSource(bookingDto, lang);
pdf.convertToPDF(lang,xml);
} catch (Exception e) {
e.printStackTrace();
}

}
});

问题

如何将 PDF 文档获取到流,以及当用户单击 Vaadin 7 应用程序中的打印按钮而不将文件保存到服务器时如何在浏览器中自动打开它?

最佳答案

按照描述在 Vaadin 下载文件 here 。摘要:

Button downloadButton = new Button("Download image");
StreamResource myResource = createResource();
FileDownloader fileDownloader = new FileDownloader(myResource);
fileDownloader.extend(downloadButton);

然后您的StreamResource提供一个包含文件数据的InputStream。因此,您不需要将文件保存在服务器上。关于打印,我不知道是否可以指示浏览器直接打开打印对话框。

关于java - 如何从 vaadin 7 中的流打印 pdf 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38816888/

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