Пустой PDF даже с самым простым Jasperreport jrxml
У меня есть сайт EJB со стеклянными рыбками 3.1 + JSF для jasperreport 4.0.1. на сайте нет проблем с потоковой передачей pdf, но он работает с пустым PDF при печати PDF с помощью runReportToPdfStream, ниже приведен фрагмент кода:
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, но был показан только пустой PDF. Пожалуйста, помогите, сообщите мне, если вам нужна дополнительная информация для анализа.
Стивен
Ответы
Ответ 1
В конце концов, JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameterMap, new JREmptyDataSource());
решила проблему.
Цитата из Sanda of Jasperreport:
По умолчанию, когда в отчете отсутствует информация о источниках данных, JR не создает страниц. Другой параметр (который может быть установлен в атрибуте report whenNoDataType
) - это распечатать все разделы отчета, за исключением <detail>
.
Этот отчет содержит подробный раздел, но только с некоторыми статическими данными. Чтобы этот раздел также был напечатан, самым простым способом является создание пустого источника данных, содержащего одну пустую запись.
Ответ 2
В дополнение к тому, что сказал Mythox, я покажу лучший способ подделать источник данных в jasper и, если вам нужно, также на JasperServer.
1) Определите пустой адаптер данных (простой XML файл) и разверните его на сервере или поместите в папку отчетов:
<?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>
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"/>
префикс "repo:" к значению свойства для адаптера данных, если xml развернут на сервере jasper.
Атрибут "whenNoDataType" будет игнорироваться.
Другие подробности здесь.