空白PDF,即使使用最简单的Jasperreport jrxml

2022-09-02 02:38:44

我有一个EJB网站,玻璃鱼3.1 + JSF for jasperreport 4.0.1。该网站在流式传输pdf时没有问题,但它在使用runReportToPdfStream打印PDF时会产生空白PDF,以下是代码片段:

EJB

public class BookEJB {  
    public void printReport() throws ClassNotFoundException, IOException, JRException {
        Map parameterMap = new HashMap();

        FacesContext ctx = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse();
        InputStream reportStream = ctx.getExternalContext().getResourceAsStream("/reports/test.jasper");

        ServletOutputStream servletOutputStream = response.getOutputStream();
        servletOutputStream.flush();

        response.setContentType("application/pdf");
        JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameterMap);

        servletOutputStream.flush();
        servletOutputStream.close();
        ctx.responseComplete();
}}

test.jrxml - 一个没有 SQL 连接的简单报告

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test" pageWidth="800" pageHeight="1200" columnWidth="555" leftMargin="25" rightMargin="25" topMargin="30" bottomMargin="30">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <pageHeader>
        <band height="100">
            <staticText>
                <reportElement x="0" y="0" width="285" height="36"/>
                <textElement>
                    <font size="24" isBold="true"/>
                </textElement>
                <text><![CDATA[Report of Testing]]></text>
            </staticText>   
        </band>
    </pageHeader>
    <detail>
        <band height="200">
            <staticText>
                <reportElement x="0" y="0" width="374" height="48"/>
                <textElement>
                    <font size="18"/>
                </textElement>
                <text><![CDATA[If you don't see this, it didn't work blah blah blah.... ]]></text>
            </staticText>
        </band>
    </detail>
    <pageFooter>
        <band height="100"/>
    </pageFooter>
</jasperReport>

在JSF上生成此报告时,glassfish中没有错误日志,但仅显示了空白PDF。请帮助,让我知道,如果你需要进一步的信息进行分析。

史蒂文


答案 1

毕竟,解决了问题。JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameterMap, new JREmptyDataSource());

引用Jasperreport的Sanda:

默认情况下,当报告中不存在数据源信息时,JR 不会生成任何页面。另一个选项(可以在报表的属性中设置)是打印除 .whenNoDataType<detail>

此报表包含一个详细信息部分,但仅包含一些静态数据。为了确保此部分也将被打印,最简单的方法是提供一个空数据源,其中包含一个空记录。

资料来源:https://community.jaspersoft.com/questions/537650/blank-pdf-even-simplest-jrxml


答案 2

不使用详细信息波段(仅使用静态值)时,可以执行以下操作:

在 iReport 项目中单击鼠标右键,然后选择“属性”,搜索属性“无数据时”,然后选择“所有部分,无详细信息”

它适用于我,使用iReport 4.0


推荐