【问题标题】:How can I export image from every row of a dataTable to pdf using PrimeFaces DataExporter?如何使用 PrimeFaces DataExporter 将数据表中每一行的图像导出为 pdf?
【发布时间】:2021-10-22 02:47:50
【问题描述】:

我有一个 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


    【解决方案1】:

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

    【讨论】:

    • 感谢您确认 PrimeFaces 不会从单元格中导出图像。您是否有任何链接(发布)或编写客户 PDF 导出器以从单元格中导出图像的示例?
    • 我没有。对不起!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多