我有一个多格式文档查看器,在其中,为了显示PDF,我使用PF Extension的p:documentViewer
组件。提供PDF的StreamedContent的backingbean是阶段渲染的,并且按预期工作。然而,尽管PDF本身渲染得很好,查看器不会在其中显示数字签名。在使用p:documentViewer
时,我是否需要向其添加任何额外的配置?以下是我的用法:
<pe:documentViewer id="pdfVw" height="600" width="800" value="#{viewerController4.pdfDocumentStream}">
<f:param name="id" value="#{viewerController4.currentDocId}" />
</pe:documentViewer>
提供PDF:内容的backingbean方法
public StreamedContent getPdfDocumentStream() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
return new DefaultStreamedContent();
} else {
String id = context.getExternalContext().getRequestParameterMap().get("id");
Doc doc = pdfDocMap.get(id);
return new DefaultStreamedContent(new FileInputStream(new File(doc.getDocPath())), "application/pdf", doc.getDocName());
}
}
顺便说一句,我在UI上还有一个功能,可以显示文档的缩略图——对于PDF,我使用PDFBox提取第一页,并将其转换为PNG图像,然后在p:graphicImage
中显示。我观察到,在这张图片中,数字签名显示得很好!
我在SpringBoot+PF 6.2+JoinFaces 上
如果您需要显示带有数字签名的PDF,PDF.js目前不支持,该票证自2012年以来一直开放。
请参阅:https://github.com/mozilla/pdf.js/issues/1076
我建议您使用这些免费的服务,并在浏览器中运行,以显示带有签名的PDF:https://verify.ink/