我正在尝试使用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();
}
}
});
问题
当用户单击Vaadin 7应用程序中的“打印”按钮而不将文件保存到服务器时,如何将PDF文档放入流中,如何在浏览器中自动将其打开?
如描述Vaadin下载文件的工作在这里。概括:
Button downloadButton = new Button("Download image");
StreamResource myResource = createResource();
FileDownloader fileDownloader = new FileDownloader(myResource);
fileDownloader.extend(downloadButton);
然后,您StreamResource
提供一个InputStream
包含文件数据的。因此,您无需将文件保存在服务器上。关于打印,我什至不知道是否可以指示浏览器直接打开打印对话框。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句