3

JasperReportsを使用してテキスト レポートを生成する必要があります。
精度は正確でなければなりません。サンプル形式は次のとおりです。

ここに画像の説明を入力

  1. ヘッダーのユーザー名は列 0 から開始する必要があります。
  2. 最後にアクセスされたヘッダーは、23 列目から開始する必要があります。
  3. ヘッダーはアクティブで、34 列目から開始する必要があります。
  4. 行区切りは 8 文字 (---) で、22 桁目から開始する必要があります
  5. 名前フィールドは左揃えで、1 列目から開始する必要があります
  6. ポイント フィールドは右揃えで、45 桁目で終了する必要があります。精度は 1 桁です。

JasperReportsexportToTextメソッドは上記の基準を満たしておらず、 .jrxmlの繰り返し調整は目的を果たしていません。
文字の幅と高さも調整しましたが、それでも行と列の間隔が正しくありません。

JasperReports APIはテキスト形式でそのような精度をサポートしていますか?
このフォーマットを達成するのに役立つ他の API はありますか?

4

1 に答える 1

5

はい、 JasperReportsでデザインを実現できます。

タスクを解決する手順。

  1. 最初のステップ。行の文字数とページの行数が必要です。この目的のために、 net.sf.jasperreports.export.text.page.widthnet.sf.jasperreports.export.text.page.height
    レポートのプロパティの ペアを使用できます。最初のプロパティの代わりに、レポートのプロパティのnet.sf.jasperreports.export.text.character.widthnet.sf.jasperreports.export.text.character.heightのペアを使用することもできます。

  2. 第二段階。ページ形式のサイズ (たとえば、ピクセル単位。マージンのない A4 の場合: 555x802) がわかっているので、行の文字数とページの行数を設定します。staticTextおよびtextField要素の位置 ( xy座標、および要素の高さのプロパティ)の正確な値を計算して設定できます。

標本、見本

サンプルデータソース

csvデータソース ( points.csvファイル)を使用しました。

USER_NAME,LAST_ACCESSED,IS_ACTIVE,POINTS
John Doe,10/26/2013,Y,87.9
Sarah Connor,10/23/2013,Y,80.5
Viktor Navorski,10/14/2013,Y,95.5
Forrest Gump,10/25/2013,Y,97.0
Raymond Babbitt,10/24/2013,Y,88.5
Thomas Crown,10/24/2013,Y,88.0
Danny Ocean,09/30/2013,Y,90.5

レポートのデザイン

マージンを削除し、A4レポートの形式 (555x802 ピクセル) を設定しました。

ここに画像の説明を入力

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="text_output" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="9a0b1db2-1ed0-44e1-960b-4626cea0097d">
    <property name="net.sf.jasperreports.export.text.page.width" value="80"/>
    <property name="net.sf.jasperreports.export.text.page.height" value="40"/>
    <field name="USER_NAME" class="java.lang.String"/>
    <field name="LAST_ACCESSED" class="java.lang.String"/>
    <field name="IS_ACTIVE" class="java.lang.String"/>
    <field name="POINTS" class="java.lang.String"/>
    <columnHeader>
        <band height="43" splitType="Stretch">
            <staticText>
                <reportElement uuid="d065f8ed-0c05-47d0-a679-a392c9cfabe5" x="0" y="0" width="152" height="20"/>
                <textElement/>
                <text><![CDATA[USER_NAME]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="573550a9-5fc9-41ee-ae4f-7b550868c75d" x="152" y="0" width="143" height="20"/>
                <textElement/>
                <text><![CDATA[LAST_ACCESSED]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="4b1f5b5c-4c61-4159-9357-041fd8e3e775" x="295" y="0" width="138" height="20"/>
                <textElement/>
                <text><![CDATA[IS_ACTIVE]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="1c851f50-9ace-4e30-be1e-7d5454127db8" x="433" y="0" width="103" height="20"/>
                <textElement/>
                <text><![CDATA[POINTS]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="7e358a83-b348-40ca-b6f4-009d6bed4b24" x="0" y="20" width="100" height="23"/>
                <textElement/>
                <text><![CDATA[----------------------]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="523a7abd-0fbd-4b63-b8d5-2ed78ee795cc" x="295" y="20" width="100" height="23"/>
                <textElement/>
                <text><![CDATA[---------]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="7ebe2ec7-9450-4fdf-b99a-48af5fe3ce49" x="152" y="20" width="100" height="23"/>
                <textElement/>
                <text><![CDATA[-------------]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="155d3972-9d99-4d3b-bb41-05f08dcdd5fa" x="433" y="20" width="100" height="23"/>
                <textElement/>
                <text><![CDATA[--------]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement uuid="652256e2-0f1e-4848-b1d0-d064caaa5020" x="0" y="0" width="152" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{USER_NAME}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="380af714-4dbd-4e0f-ae23-bfada0449a2f" x="152" y="0" width="143" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{LAST_ACCESSED}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="752c0f18-2dea-4209-bd0d-d787d8c462a8" x="295" y="0" width="63" height="20"/>
                <textElement textAlignment="Right"/>
                <textFieldExpression><![CDATA[$F{IS_ACTIVE}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="40807ad0-58a4-42b7-9636-04f01c0c3bf5" x="433" y="0" width="54" height="20"/>
                <textElement textAlignment="Right"/>
                <textFieldExpression><![CDATA[$F{POINTS}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

結果 - JRTextExporter 経由で生成された txt ファイル

出力ファイルの生成にiReportを使用しました。このtxtファイルの内容は次のとおりです。

txt ファイルとして生成されたレポート

Java コードの使用

Javaコードを使用する場合、 JRTextExporterに次のパラメータを設定する必要があります: JRTextExporterParameter.PAGE_WIDTHおよびJRTextExporterParameter.PAGE_HEIGHT

サンプルコード:

public static void generateReport() throws JRException {
    JRCsvDataSource dataSource = new JRCsvDataSource(JRLoader.getLocationInputStream(csvFileName));
    dataSource.setRecordDelimiter("\r\n");
    dataSource.setUseFirstRowAsHeader(true);
    dataSource.setColumnNames(new String[]{ "USER_NAME", "LAST_ACCESSED", "IS_ACTIVE", "POINTS"});

    JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource);

    JRTextExporter exporter = new JRTextExporter();

    exporter.setParameter(JRTextExporterParameter.PAGE_WIDTH, 80);
    exporter.setParameter(JRTextExporterParameter.PAGE_HEIGHT, 40);
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFileName);
    exporter.exportReport();
}

このサンプルでは、​​データソースと同じcsvファイルを使用しました。


x 座標の計算方法

サンプルでは、​​2 番目の列を 23 個のシンボルで開始したいと考えています。わかりました、私のサンプルを見てみましょう。私たちが持っているもの:

  • ページ幅は555ピクセルです
  • 行の文字数は80です

この場合の 1 文字の幅は555/80=6,9375です。
2 列目の最初のシンボルの前に 22 個のシンボルがあります。22*6,9375=152,625ピクセルです。私のサンプルでは、​​2 番目の列ヘッダーのxプロパティに152を設定しました。私のサンプルでは、​​2 列目のヘッダーの最初のシンボルの位置は23です。

3 列目の計算値は43*6,9375=298,3125で、サンプルの実際のx295です(3 列目は44シンボルの星)。

ご覧のとおり、計算は正確すぎます。


ノート:

テキスト ファイルへのエクスポートに関する情報は、テキストエクスポートのサンプルを参照してください。

于 2013-10-26T19:24:09.390 に答える