Я пытаюсь распечатать pdf прямо из потока в vaadin 7 с помощью Apache FOP + xsl. На данный момент я могу успешно создать новый XML-документ и восстановить pdf-файл с помощью xsl fo. Я сохраняю файл на сервере, и все выглядит хорошо.Как распечатать pdf-файл из потока в vaadin 7?
Моя проблема заключается в том, что сохранить файл на сервере невозможно, поэтому мне нужно его прочитать на какой-то bytearray, а затем открыть его, когда пользователь нажимает кнопку «Печать».
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 приложения без сохранения файла сервер?
Спасибо за ваш комментарий! Я получил ByteArrayOutputStream от трансформатора Apache FOP. есть ли способ получить StreamResource каким-то образом из выходного потока? Я получил поток, когда пользователь нажимает кнопку печати. – Sami
Посмотрите на связанную страницу wiki, пример кода: 'new ByteArrayInputStream (bos.toByteArray())' где 'bos' является' ByteArrayOutputStream' –
Спасибо Steffen. Теперь я получил его отчасти. Пользователь должен дважды щелкнуть кнопку, чтобы загрузить pdf-файл. – Sami