如何解决如何在新的浏览器选项卡中打开由itext 7生成的pdf文件
我使用itext 7在Java中制作pdf文件,并将其保存在本地计算机上。
如何以某种方式在新的浏览器选项卡中打开此文件而不将其存储在计算机上?
解决方法
我解决了这个问题。
在这里,我生成一个pdf文件并返回他的StreamResource:
public static StreamResource generateTestPdf(){
ByteArrayOutputStream dest = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdfDoc = new PdfDocument(writer);
Document document = new Document(pdfDoc);
Paragraph title = new Paragraph("Hello World!");
document.add(title);
StreamResource streamResource = null;
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
document.close();
ByteArrayInputStream inputStream = new ByteArrayInputStream(dest.toByteArray());
streamResource = new StreamResource("file.pdf",new InputStreamFactory() {
@Override
public InputStream createInputStream() {
return inputStream;
}
});
return streamResource;
}
此后,我在页面上添加了一个带有侦听器的按钮,该按钮会在浏览器的新标签页中打开生成的文件:
Button print = new Button("Print");
print.addClickListener(e -> {
this.close();
final StreamRegistration registration = VaadinSession.getCurrent().getResourceRegistry().registerResource(PdfGenerator.generateTestPdf());
UI.getCurrent().getPage().setLocation(registration.getResourceUri());
}
);
我不知道此解决方案的正确性,但是对我有用。谢谢大家!
P.S。我使用Vaadin 14和Itext 7.1.12
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。