我正在尝试使用版本 13.0.5 中的 Primefaces p:media 组件来显示从数据库加载的 pdf。
这是我的 BackingBean getter,它肯定会被调用并使用数据库中提供的 byte[] 构建 StreamedContent:
public StreamedContent getMedia() {
StreamedContent result;
if (this.selectedRow == null) {
return null;
}
result = DefaultStreamedContent.builder()
.contentType("application/pdf")
.stream(() -> {
try {
return new ByteArrayInputStream(this.getSelectedDokument().getDocumentAsByte());
} catch (Exception e) {
e.printStackTrace();
return null;
}
})
.build();
return result;
}
这是我的 xhtml 代码:
<div class="card">
<h5>PDF</h5>
<p:media value="#{controller.getMedia()}" width="100%" height="590px" id="media" cache="false"
player="pdf"/>
</div>
在资源文件夹中使用 PDF 的静态路径时,它工作正常。 也使用 Primefaces Extensions(版本 13.0.13)pe:documentViewer 进行了测试,行为是相同的,但在浏览器控制台中出现以下错误。
有人能猜出这里出了什么问题吗?
啊,您可以尝试添加一个
.name("my.pdf")
值,看看是否有效。
result = DefaultStreamedContent.builder()
.contentType("application/pdf")
.name("my.pdf")
.stream(() -> {
try {
return new ByteArrayInputStream(this.getSelectedDokument().getDocumentAsByte());
} catch (Exception e) {
e.printStackTrace();
return null;
}
})
.build();