如何在新的浏览器标签页中打开使用iText 7生成的PDF文件,Java。

huangapple go评论104阅读模式
英文:

How to open a pdf file generated with itext 7 in new browser tab java

问题

我使用iText 7在Java中创建了一个PDF文件,并可以将其保存到我的本地计算机。

有什么方法可以在新的浏览器选项卡中打开这个文件,而不必将它存储在我的计算机上?

英文:

I make a pdf file in java using itext 7 and can save it on my local computer.

How can I open this file in new browser tab somehow without storing it on my computer?

答案1

得分: 0

我解决了我的问题。

在这里,我生成一个 PDF 文件并返回其 StreamResource:

  1. public static StreamResource generateTestPdf(){
  2. ByteArrayOutputStream dest = new ByteArrayOutputStream();
  3. PdfWriter writer = new PdfWriter(dest);
  4. PdfDocument pdfDoc = new PdfDocument(writer);
  5. Document document = new Document(pdfDoc);
  6. Paragraph title = new Paragraph("Hello World!");
  7. document.add(title);
  8. StreamResource streamResource = null;
  9. try {
  10. writer.close();
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. document.close();
  15. ByteArrayInputStream inputStream = new ByteArrayInputStream(dest.toByteArray());
  16. streamResource = new StreamResource("file.pdf", new InputStreamFactory() {
  17. @Override
  18. public InputStream createInputStream() {
  19. return inputStream;
  20. }
  21. });
  22. return streamResource;
  23. }

之后,我在页面上添加了一个带有监听器的按钮,该监听器会在浏览器的新标签页中打开生成的文件:

  1. Button print = new Button("Print");
  2. print.addClickListener(e -> {
  3. this.close();
  4. final StreamRegistration registration = VaadinSession.getCurrent().getResourceRegistry().registerResource(PdfGenerator.generateTestPdf());
  5. UI.getCurrent().getPage().setLocation(registration.getResourceUri());
  6. });

我不确定这个解决方案是否正确,但它对我起作用。谢谢大家!

附注:我使用的是 Vaadin 14 和 Itext 7.1.12。

英文:

I solved my problem that.

Here I generate a pdf file and return his StreamResource:

  1. public static StreamResource generateTestPdf(){
  2. ByteArrayOutputStream dest = new ByteArrayOutputStream();
  3. PdfWriter writer = new PdfWriter(dest);
  4. PdfDocument pdfDoc = new PdfDocument(writer);
  5. Document document = new Document(pdfDoc);
  6. Paragraph title = new Paragraph("Hello World!");
  7. document.add(title);
  8. StreamResource streamResource = null;
  9. try {
  10. writer.close();
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. document.close();
  15. ByteArrayInputStream inputStream = new ByteArrayInputStream(dest.toByteArray());
  16. streamResource = new StreamResource("file.pdf", new InputStreamFactory() {
  17. @Override
  18. public InputStream createInputStream() {
  19. return inputStream;
  20. }
  21. });
  22. return streamResource;
  23. }

After that I add on my page a Button with listener, that opens generated file in browser new tab:

  1. Button print = new Button("Print");
  2. print.addClickListener(e -> {
  3. this.close();
  4. final StreamRegistration registration = VaadinSession.getCurrent().getResourceRegistry().registerResource(PdfGenerator.generateTestPdf());
  5. UI.getCurrent().getPage().setLocation(registration.getResourceUri());
  6. }
  7. );

I don’t know how correct this solution is, but it worked for me. Thanks to all!

P.S. I use Vaadin 14 and Itext 7.1.12

huangapple
  • 本文由 发表于 2020年9月8日 23:14:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/63796823.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定