Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 空白PDF,即使使用最简单的Jasperreport jrxml_Java_Jasper Reports - Fatal编程技术网

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

Java 空白PDF,即使使用最简单的Jasperreport jrxml,java,jasper-reports,Java,Jasper Reports,我有一个用于jasperreport 4.0.1的带有glassfish 3.1+JSF的EJB站点。该网站在流式pdf方面没有问题,但在使用runReportToPdfStream打印pdf时会生成空白pdf,下面是代码片段: EJB public class BookEJB { public void printReport() throws ClassNotFoundException, IOException, JRException { Map parame

我有一个用于jasperreport 4.0.1的带有glassfish 3.1+JSF的EJB站点。该网站在流式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。请帮助,如果您需要进一步的分析信息,请告诉我


Steven

毕竟,
JasperUnmanager.runReportToPdfStream(reportStream,servletOutputStream,parameterMap,new JREptyDataSource())解决了问题

引自Jasperreport的散打:

默认情况下,当报表中没有数据源信息时,JR不会生成任何页面。另一个选项(可在报告的
WhenNodeType
属性中设置)是打印除
之外的所有报告部分

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


除了Mytox所说的之外,我还将展示在jasper中伪造数据源的最佳方法,如果您还需要在JasperServer上伪造数据源的话

1) 定义一个空的数据适配器(一个简单的.xml文件),并将其部署到服务器中或放在reports文件夹中:

<?xml version="1.0" encoding="UTF-8" ?><emptyDataAdapter class="net.sf.jasperreports.data.empty.EmptyDataAdapterImpl"><name>Nuovo Data Adapter 1</name><recordCount>1</recordCount></emptyDataAdapter>
Nuovo数据适配器11
2) 将其链接到主报告:

<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="repor" language="javascript" pageWidth="612" pageHeight="792" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isFloatColumnFooter="true" uuid="c0eee90e-1b1a-4f34-ad99-1112847752de">
<property name="net.sf.jasperreports.data.adapter" value="EmptyDataAdapter.xml"/>

如果xml部署在jasper服务器上,则为数据适配器的属性值添加前缀“repo:”

属性“WhenNodeType”将被忽略


其他细节

如果不使用“详细信息”栏,只使用静态值,则可以执行以下操作:

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


它适合我,使用iReport 4.0你救了我。谢谢!!这也帮助了我。谢谢。