如何在新的浏览器选项卡中打开使用 itext 7 生成的 pdf 文件 java

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

我使用 itext 7 在 java 中制作了一个 pdf 文件,并可以将其保存在我的本地计算机上。

如何在新浏览器选项卡中打开此文件而不将其存储在我的计算机上?

我解决了我的问题。

这里我生成一个pdf文件和return他的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