如何使用 PrimeFaces DataExporter 将数据表每一行的图像导出为 pdf?

问题描述 投票:0回答:2

我有一个 XHTML,显示数据表中的行,其中有几个文本列和一个图像列。我已经能够导出 pdf 中所有记录的文本列,但无法导出行中的图像。我搜索了很多帖子以找到一种方法从行中导出图像,但失败了。请注意,我不想为页眉或页脚导出单个图像,这可以通过 p:dataExporter 标记中的 preProcessor 属性来处理。我在 dataExport 标签中找到了使用 PreProcessor 导出单个图像的良好提示/示例。这些提示对我来说效果很好。但我无法找到按行图像导出的任何提示/示例。请帮忙!

我的技术栈: JSF2、PrimeFaces 4.0、itext-1.1.4、JDK1.8、GlassFish Server 4

我当前的 xhtml 输出如下所示。我需要将绿色勾号和红色十字导出为 pdf。

My current xhtml output

我的 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="&nbsp;" 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。绿色勾号和红色叉号应出现在“用户活动”列中。

PDF that is currently getting generated

primefaces preprocessor
2个回答
1
投票

PrimeFaces 导出器不导出单元格中的图像,仅导出文本。您必须编写一个自定义 PDF 导出器来满足您的需求。


0
投票

您可以尝试使用自定义导出器来实现此目的 -

查看此链接了解详细信息: https://primefaces.github.io/primefaces/12_0_0/#/components/dataexporter

© www.soinside.com 2019 - 2024. All rights reserved.