3

を使っiReport Designer 4.7て作成しています.jrxml.jrxmlJAVAから渡されたパラメータを表示する非常にシンプルです。テスト PDF は iReport Designer から生成され、Adobe Reader を使用して表示できます。

さて、ここにJavaコードがあります

createReport(String reportName, Map params)サーブレットから呼び出しています。パラメータはサーブレットから設定されます。常にパラメータが渡されます。

public void generateReport(String fileName, String outFileName, Map paramerterMap,
            String reportFormat) throws JRException{

    String reportSource = "C:\\jrxml\\" + fileName;
    String outFile = null;
    downloadPath = "C:\\pdfs\\";

    outFile = downloadPath + outFileName;
            JRExporter exporter = new JRPdfExporter();
            JasperPrint jasperPrint = JasperFillManager.fillReport(reportSource, paramerterMap);
        exporter.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING,"UTF-8");
                    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFile);
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

                    exporter.exportReport();
}

public Boolean createReport(String reportName, Map params) {
    try {
        String jrFile = reportName + ".jasper";
        String outFileName = String.valueOf(7884);
        outFileName += "_" + reportName + ".pdf";
        generateReport(jrFile, outFileName, params, ".pdf");
        return true;
    }  catch (JRException e) {
        e.printStackTrace();
        log.error("ReportManager--generateReport--JRException: " + e);
                    return false;
    } catch (Exception e) {
        e.printStackTrace();
        log.error("ReportManager--generateReport--Exception: " + e);
        return false;
    }
}

.jariReport Designerが使用したのと同じセットを使用しています。.jar(実際、iReport のインストール ディレクトリからファイルをコピーしました)

問題: JAVA コードを使用して生成された pdf が壊れています。 作成した場所で PDF を開こうとすると、Adobe リーダーは次のように言います。

サポートされているファイル タイプではないか、ファイルが破損しているため (たとえば、電子メールの添付ファイルとして送信され、正しくデコードされなかったなど)、Adobe Reader は 'test.pdf' を開くことができませんでした。

ここに画像の説明を入力

編集: 例外は発生せず、生成されたファイル サイズは約 5 KB です。

EDIT2:JRXMLの追加

<?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="Certificate" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7367a6fb-f8da-4ba3-b90d-319807f92789">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <property name="ireport.scriptlethandling" value="0"/>
    <property name="ireport.encoding" value="UTF-8"/>
    <import value="net.sf.jasperreports.engine.*"/>
    <import value="java.util.*"/>
    <import value="net.sf.jasperreports.engine.data.*"/>
    <parameter name="name" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="27" splitType="Stretch">
            <textField pattern="MMMMM dd, yyyy" isBlankWhenNull="false">
                <reportElement uuid="b72c0bad-3935-40ba-8d6d-3993cb5122d2" key="textField" x="413" y="0" width="140" height="20"/>
                <box>
                    <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                </box>
                <textElement>
                    <font size="12"/>
                </textElement>
                <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <pageHeader>
        <band height="21" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="22" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="141" splitType="Stretch">
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement uuid="cbaae0d4-53da-420e-8efa-7f4fcc6900f0" key="name" x="0" y="10" width="530" height="20"/>
                <box>
                    <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <bottomPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                    <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>
                </box>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="Arial" size="11" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{name}]]></textFieldExpression>
            </textField>

        </band>
    </detail>
    <columnFooter>
        <band splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="20" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band splitType="Stretch"/>
    </summary>
</jasperReport>
4

1 に答える 1

1

ハーディク、

ここに 2 ~ 3 個のものが見えます

1) generateReport の出力ファイル名は常に「c:\pdfs」+ NULL になります。( なぜ test.pdf がまだ作成されているのだろうか)

2)gujaratiオブジェクトにはレポートのパラメータが含まれていますか??

編集

3) レポート生成のために 2 つの別個の関数を保持する理由を尋ねるだけですか? 私の意見では、単一の機能で目的を達成できますcreateReport

編集:2

このリンクが役立つと思います:http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/faq.html?group_id=252#FAQ29

于 2012-09-16T11:18:14.677 に答える