我有一个 XHTML,显示数据表中的行,其中有几个文本列和一个图像列。我已经能够导出 pdf 中所有记录的文本列,但无法导出行中的图像。我搜索了很多帖子以找到一种方法从行中导出图像,但失败了。请注意,我不想为页眉或页脚导出单个图像,这可以通过 p:dataExporter 标记中的 preProcessor 属性来处理。我在 dataExport 标签中找到了使用 PreProcessor 导出单个图像的良好提示/示例。这些提示对我来说效果很好。但我无法找到按行图像导出的任何提示/示例。请帮忙!
我的技术栈: JSF2、PrimeFaces 4.0、itext-1.1.4、JDK1.8、GlassFish Server 4
我当前的 xhtml 输出如下所示。我需要将绿色勾号和红色十字导出为 pdf。
我的 JSF/XHTML 代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/templates/common.xhtml">
<ui:define name="content">
<h:panelGroup id="formTitle" layout="block">
<h:outputText value="#{bundle.ListUsersTitle}"></h:outputText>
</h:panelGroup>
<h:form styleClass="jsfcrud_list_form">
<h:panelGroup id="messagePanel" layout="block">
<h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
</h:panelGroup>
<h:outputText escape="false" value="#{bundle.ListUsersEmpty}" rendered="#{usersController.items.rowCount == 0}"/>
<h:panelGroup rendered="#{usersController.items.rowCount > 0}">
<p:dataTable id="dtUsers" value="#{usersController.items}" var="item" scrollable="true" scrollHeight="500">
<p:column sortBy="#{item.id}">
<f:facet name="header">
<h:outputText value="#{bundle.ListUsersTitle_id}"/>
</f:facet>
<h:outputText value="#{item.id}" />
</p:column>
<p:column sortBy="#{item.userName}">
<f:facet name="header">
<h:outputText value="#{bundle.ListUsersTitle_userName}"/>
</f:facet>
<h:outputText value="#{item.userName}" />
</p:column>
<p:column sortBy="#{item.userPassword}" exportable="false">
<f:facet name="header">
<h:outputText value="#{bundle.ListUsersTitle_userPassword}"/>
</f:facet>
<h:outputText value="#{item.userPassword}" />
</p:column>
<p:column id="userActiveCol" sortBy="#{item.userActive}">
<f:facet name="header">
<h:outputText value="#{bundle.ListUsersTitle_userActive}"/>
</f:facet>
<h:graphicImage id="yesId" value="/img/Yes.png" alt="Yes" rendered="#{item.userActive == 'Y'}"/>
<h:graphicImage id="noId" value="/img/No.png" alt="No" rendered="#{item.userActive == 'N'}"/>
</p:column>
<p:column sortBy="#{item.userSource}">
<f:facet name="header">
<h:outputText value="#{bundle.ListUsersTitle_userSource}"/>
</f:facet>
<h:outputText value="#{(item.userSource == 'ORGANIZATION')?'Organization':
(item.userSource == 'VENDOR')?'Vendor':
(item.userSource == 'VENDORRESOURCE')?'Vendor Resource':
(item.userSource == 'CUSTOMER')?'Customer':'Not Known'}" />
</p:column>
<p:column sortBy="#{item.resourceId}">
<f:facet name="header">
<h:outputText value="#{bundle.ListUsersTitle_resourceId}"/>
</f:facet>
<h:outputText value="#{item.resourceId}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{bundle.ListUsersTitle_resourceName}"/>
</f:facet>
<h:outputText value="#{usersController.getResourceName(item)}" />
</p:column>
<p:column headerText=" " exportable="false">
<h:panelGroup styleClass="formRowAction">
<p:commandLink action="#{usersController.prepareView}" value="#{bundle.ListUsersViewLink}"/>
</h:panelGroup>
<h:panelGroup styleClass="formRowAction">
<p:commandLink action="#{usersController.prepareEdit}" value="#{bundle.ListUsersEditLink}"/>
</h:panelGroup>
<h:panelGroup styleClass="formRowAction">
<p:commandLink action="#{usersController.destroy}"
value="#{bundle.ListUsersDestroyLink}" />
</h:panelGroup>
</p:column>
</p:dataTable>
</h:panelGroup>
<br />
<h:panelGroup styleClass="formBottomActions">
<h:panelGroup>
<h:commandLink action="#{usersController.prepareCreate}" value="#{bundle.ListUsersCreateLink}"/>
</h:panelGroup>
<h:panelGroup>
<p:commandLink value="#{bundle.ExportPDF}" immediate="true" id="generatePDFId" ajax="false">
<p:dataExporter type="pdf" target="dtUsers" fileName="Users"/>
</p:commandLink>
</h:panelGroup>
<h:panelGroup>
<h:link outcome="/subMenu" value="#{bundle.SubMenuLink}"/>
</h:panelGroup>
<h:panelGroup>
<h:commandLink action="#{menuHandler.returnToMainMenu}" value="#{bundle.mainMenuLink}"/>
</h:panelGroup>
</h:panelGroup>
</h:form>
</ui:define>
</ui:composition>
</html>
当前正在生成PDF。绿色勾号和红色叉号应出现在“用户活动”列中。
PrimeFaces 导出器不导出单元格中的图像,仅导出文本。您必须编写一个自定义 PDF 导出器来满足您的需求。
您可以尝试使用自定义导出器来实现此目的 -
查看此链接了解详细信息: https://primefaces.github.io/primefaces/12_0_0/#/components/dataexporter