如何从 Vaadin Flow App 下载 PDF?

How to download a PDF from Vaadin Flow App?

如何在 Vaadin 中下载 pdf 文件?它似乎与锚按钮有关,但不知道如何下载它。

我查看了多种资源,但 none 对我有所帮助。这是一个预先编写的 pdf,不是动态创建的,因此消除了一堆问题。 This one是围绕Vaadin7设计的,对我没有帮助。

如果PDF在你的public静态文件中,比如Spring应用中的src/main/resources/META-INF/resources,就这么简单,其中文件路径"sample.pdf" 相对于 src/main/resources/META-INF/resources.

Anchor anchor = new Anchor("sample.pdf", "Download PDF");
anchor.getElement().setAttribute("download", "downloaded-file-name.pdf");
add(anchor);

否则,您可以使用此方法。在我的例子中,文件的位置是 src/main/resources/sample2.pdf.

StreamResource streamResource = new StreamResource("whatever.pdf", 
    () -> getClass().getResourceAsStream("/sample2.pdf"));
Anchor anchor = new Anchor(streamResource, "Download PDF");
anchor.getElement().setAttribute("download", "downloaded-other-name.pdf");
add(anchor);

请注意 /sample2.pdf 中的前导斜线,这很重要。

如果我们不设置 download 属性,文件可能会被打开而不是下载,名称为 whatever.pdf.

如果我们将 download 属性设置为空字符串,它将以名称 whatever.pdf 下载。否则,它将以我们在属性中提供的名称下载。