2017-06-13 79 views
0

我搜索了很多,我是jasper报告的新成员。 我做了一个简单的碧玉报告的项目(在的JasperSoft工作室),该报告需要从DataAdapter.xml的数据,我已经作为一个“自定义实现的JRDataSource的”创建为一个工厂类我写了这个:如何使用数据适配器将jasper报告导出为pdf,该数据适配器将类作为数据源获取字段

package mydapackage; 

import java.math.BigInteger; 
import java.time.LocalDate; 
import java.time.format.DateTimeFormatter; 
import java.util.Random; 

import net.sf.jasperreports.engine.JRDataSource; 
import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JRField; 

public class MyImplementation implements JRDataSource { 


    static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMMM yyyy"); 
    static LocalDate localDate = LocalDate.now(); 
    static Random random = new Random(); 
    static String codigoVer = new BigInteger(50, random).toString(32); 

    private static final Integer[] FOJAS_ARRAY = { 25 }; 
    private static final Integer[] NUMEROTITULO_ARRAY = { 86 }; 
    private static final Integer[] ANOTITULO_ARRAY = { 2009 }; 
    private static final String[] REGISTRO_ARRAY = { "Propiedad" }; 
    private static final String[] VIGENCIA_ARRAY = { "Con Vigencia" }; 
    private static final Integer[] PRECIO_ARRAY = { 5000 }; 
    private static final String[] FECHA_ARRAY = { dtf.format(localDate) }; 
    private static final Integer[] ANOACTUAL_ARRAY = { 2017 }; 
    private static final String[] BOLETA_ARRAY = { "78965458" }; 
    private static final String[] ALEATORIO = { codigoVer }; 

    private int counter = -1; 

    @Override 
    public boolean next() throws JRException { 
     if (counter < FOJAS_ARRAY.length - 1) { 
      counter++; 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public Object getFieldValue(JRField jrField) throws JRException { 
     if (jrField.getName().equals("FOJAS"))return FOJAS_ARRAY[counter]; 
     else if (jrField.getName().equals("NUMEROTITULO"))return NUMEROTITULO_ARRAY[counter]; 
     else if (jrField.getName().equals("ANOTITULO"))return ANOTITULO_ARRAY[counter]; 
     else if (jrField.getName().equals("REGISTRO"))return REGISTRO_ARRAY[counter]; 
     else if (jrField.getName().equals("VIGENCIA"))return VIGENCIA_ARRAY[counter]; 
     else if (jrField.getName().equals("PRECIO"))return PRECIO_ARRAY[counter]; 
     else if (jrField.getName().equals("FECHA"))return FECHA_ARRAY[counter]; 
     else if (jrField.getName().equals("ANOACTUAL"))return ANOACTUAL_ARRAY[counter]; 
     else if (jrField.getName().equals("BOLETA"))return BOLETA_ARRAY[counter]; 
     else if (jrField.getName().equals("COD_VERIFICACION"))return ALEATORIO[counter]; 
     return ""; 
    } 

    public static JRDataSource getDataSource() { 
     return new MyImplementation(); 
    } 
} 

我的数据适配器名称只是“DataAdapter.xml” 我的碧玉报告文件名是:“caratula.jrxml”这里是代码:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Created with Jaspersoft Studio version 6.3.1.final using JasperReports Library version 6.3.1 --> 
<!-- 2017-06-13T11:11:43 --> 
<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="caratula_def" language="groovy" pageWidth="612" pageHeight="935" columnWidth="556" leftMargin="28" rightMargin="28" topMargin="28" bottomMargin="28" uuid="3617c6de-583f-41d0-bc9a-92ec55a4cddb"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="DataAdapter.xml"/> 
    <property name="ireport.zoom" value="1.5"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="488"/> 
    <field name="FOJAS" class="java.lang.Integer"/> 
    <field name="NUMEROTITULO" class="java.lang.Integer"/> 
    <field name="ANOTITULO" class="java.lang.Integer"/> 
    <field name="REGISTRO" class="java.lang.String"/> 
    <field name="VIGENCIA" class="java.lang.String"/> 
    <field name="PRECIO" class="java.lang.Integer"/> 
    <field name="FECHA" class="java.lang.String"/> 
    <field name="ANOACTUAL" class="java.lang.Integer"/> 
    <field name="BOLETA" class="java.lang.String"/> 
    <field name="COD_VERIFICACION" class="java.lang.String"/> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band splitType="Stretch"/> 
    </title> 
    <pageHeader> 
     <band splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band splitType="Stretch"/> 
    </columnHeader> 
    <detail> 
     <band height="799" splitType="Stretch"> 
      <image> 
       <reportElement x="137" y="267" width="287" height="260" uuid="46f3298b-64ec-4179-880e-4b5f40dd71f2"/> 
       <imageExpression><![CDATA["C:\\firma\\ESCUDO.png"]]></imageExpression> 
      </image> 
      <rectangle> 
       <reportElement mode="Transparent" x="51" y="69" width="453" height="619" uuid="e6f767f1-8f41-4f03-9bc0-9d6126b8e23e"/> 
      </rectangle> 
      <image> 
       <reportElement x="51" y="82" width="123" height="111" uuid="98fec185-0f0b-44de-bd5e-de0cdd7c79cb"/> 
       <imageExpression><![CDATA["C:\\firma\\conservador-logo-of.png"]]></imageExpression> 
      </image> 
      <staticText> 
       <reportElement x="251" y="692" width="253" height="40" uuid="73f3aa14-49a6-47fa-a6e6-46d659d76239"/> 
       <textElement textAlignment="Justified"> 
        <font size="6"/> 
       </textElement> 
       <text><![CDATA[Documento incorpora firma electrónica avanzada conforme a Ley N°19.799. 
La vigencia de la firma electrónica en el documento, al igual que la integridad y autenticidad del mismo, deben ser verificados en www.conservadortemuco.cl, donde estará disponible por 90 días contados desde la fecha de su emisión. 
Documento impreso es sólo una copia del documento original.]]></text> 
      </staticText> 
      <staticText> 
       <reportElement x="162" y="100" width="335" height="28" uuid="fbdf830f-a257-4aee-997b-86cdd2dd39b2"/> 
       <textElement textAlignment="Right"> 
        <font size="16" isBold="true"/> 
       </textElement> 
       <text><![CDATA[Conservador de Bienes Raíces de Temuco]]></text> 
      </staticText> 
      <staticText> 
       <reportElement x="342" y="124" width="155" height="12" uuid="caafa104-4346-4480-be66-e52999cc1d00"/> 
       <textElement textAlignment="Right"> 
        <font size="8"/> 
       </textElement> 
       <text><![CDATA[Vicuña Mackenna 0361, Temuco]]></text> 
      </staticText> 
      <staticText> 
       <reportElement x="334" y="135" width="163" height="13" uuid="a69883f2-c2f0-43d8-a51b-94e1301d594d"/> 
       <textElement textAlignment="Right"> 
        <font size="8"/> 
       </textElement> 
       <text><![CDATA[http://www.conservadortemuco.cl]]></text> 
      </staticText> 
      <textField isBlankWhenNull="true"> 
       <reportElement x="91" y="225" width="251" height="23" uuid="6fc40966-65db-4d96-b741-fb7688154b8b"/> 
       <textElement> 
        <font size="16" isBold="true"/> 
       </textElement> 
       <textFieldExpression><![CDATA["Registro de "+$F{REGISTRO}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="91" y="267" width="243" height="23" uuid="f5d27d27-0d48-4673-b9c3-76458ddae2a3"/> 
       <textElement> 
        <font size="16" isBold="true"/> 
       </textElement> 
       <textFieldExpression><![CDATA["Copia "+$F{VIGENCIA}]]></textFieldExpression> 
      </textField> 
      <textField pattern="dd/MMMMM/yyyy"> 
       <reportElement x="91" y="332" width="380" height="170" uuid="1b0f23cc-a19b-4e48-b59b-d05c3a804a8c"/> 
       <textElement textAlignment="Justified"> 
        <font size="12"/> 
       </textElement> 
       <textFieldExpression><![CDATA["El Conservador de Bienes Raíces de Temuco certifica que la inscripción de fojas "+$F{FOJAS}+" número "+$F{NUMEROTITULO}+" correspondiente al Registro de Propiedad del año "+$F{ANOTITULO}+" , adjunta al presente documento, está conforme con su original y se encuentra vigente al día "+$F{FECHA}+"."+"\n\nLos derechos registrales correspondientes a esta actuación ascienden a la suma de \$ "+$F{PRECIO}+".-"]]></textFieldExpression> 
      </textField> 
      <textField pattern="dd MMMMM yyyy"> 
       <reportElement x="143" y="521" width="137" height="20" uuid="a315d92d-94a6-41a8-b764-78f76fe590b7"/> 
       <textElement> 
        <font size="12"/> 
       </textElement> 
       <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> 
      </textField> 
      <staticText> 
       <reportElement x="91" y="520" width="60" height="20" uuid="4f6aa279-5ee1-4d92-b661-9ecd51f89384"/> 
       <textElement> 
        <font size="12"/> 
       </textElement> 
       <text><![CDATA[Temuco, ]]></text> 
      </staticText> 
      <image> 
       <reportElement x="390" y="561" width="91" height="86" uuid="ce857035-b39f-473d-a6e2-3b36aadb6028"/> 
       <imageExpression><![CDATA["C:\\Users\\Fernando\\Desktop\\Timbre_chico.png"]]></imageExpression> 
      </image> 
      <image> 
       <reportElement x="228" y="540" width="216" height="127" uuid="7fbdb127-6008-4c9a-a3b9-2e6b96c9cc66"/> 
       <imageExpression><![CDATA["C:\\Users\\Fernando\\Desktop\\firma_htoro.png"]]></imageExpression> 
      </image> 
      <componentElement> 
       <reportElement isPrintRepeatedValues="false" x="45" y="700" width="300" height="39" uuid="0430a4dc-0df9-45ef-83ac-0b5d1fae0e55"> 
        <property name="com.jaspersoft.studio.unit.width" value="pixel"/> 
       </reportElement> 
       <jr:Code128 xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> 
        <jr:codeExpression><![CDATA[$F{ANOACTUAL}.toString()+"-"+$F{ANOTITULO}.toString()+"-"+$F{FOJAS}.toString()+"-"+$F{NUMEROTITULO}.toString()+"-"+$F{BOLETA}.toString()]]></jr:codeExpression> 
       </jr:Code128> 
      </componentElement> 
      <textField> 
       <reportElement x="65" y="689" width="200" height="19" uuid="e3e5c7a6-44f9-407d-ac01-3a60796f1055"/> 
       <textElement> 
        <font fontName="SansSerif" size="8"/> 
       </textElement> 
       <textFieldExpression><![CDATA["Código de verificación: "+$F{COD_VERIFICACION}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
    <columnFooter> 
     <band splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band splitType="Stretch"/> 
    </summary> 
</jasperReport> 

一切工作正常,但这样的:我不能找到一种将报告预览另存为PDF文件的方法。

请任何人都可以帮助我?我真的搜了很多......但没有找到答案...

在此先感谢!

+0

您应该使用出口国,并保存输出到文件 –

+0

亚历克斯,感谢您的回答,因为艾未未说我是新来的碧玉报告......你能不能请Tellme公司在哪里可以找到类似的东西的例子我码?? – fenjo

回答

0
private void streamPdfReport(OutputStream out, HttpServletResponse response, String reportName, JasperPrint jasperPrint) throws JRException { 
    logger.fine("Executing streamReport..."); 
    response.reset(); 
    response.setContentType("application/pdf"); 
    response.setHeader("Content-Disposition", "attachment; filename=" + reportName + ".pdf"); 
    // work-around for IE bug, where Adobe Reader would put up an error message: 
    // "There was an error opening this document. This file cannot be found." 
    response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); 
    JasperExportManager.exportReportToPdfStream(jasperPrint, out); 
} 

import net.sf.jasperreports.engine.JRException; 
import net.sf.jasperreports.engine.JasperExportManager; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JasperPrint; 
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 
相关问题