web-dev-qa-db-ja.com

複数のjrxmljasperレポートを1つのPDF出力ファイルにまとめる方法

5つの異なるSQLクエリを使用してレポートを作成する必要があります。各クエリは1つのレポートテーブルを提供します。

そこで、上記のクエリの1つにそれぞれ対応する5つのjrxmlファイルを、独自の見出し、タイトル設定、フッター、ページ番号などで作成しました。

これで、上記の各jrxmlをコンパイル、印刷、および5つの異なるPDFにエクスポートすることができます。

ただし、クライアントは、すべてのレポートを1つのPDFにまとめることを望んでいます。これは最終的なPDFにあり、最初の4ページはレポート1、次の5ページはレポート2、次にレポート3というようになります。

1)これを達成する方法は?

2)各レポートのページ番号は1/4、2/4、3/4などです。2番目の部分、つまり完全なページ番号は、レポートとしての評価時間で評価されます。したがって、すべてのレポートを単一のpdfで照合する場合(可能な場合)、最終的なpdfに正当化するためにページの番号を付け直すこともできますか?

以下の答えに基づいて、私はJavaクラスで次のことを行い、それは機能します:

 try
            {
            JasperReport jreport1 = JasperCompileManager.compileReport(input1);
            JasperPrint jprint1 = JasperFillManager.fillReport(jreport1, new HashMap(), new JREmptyDataSource());
            //JasperExportManager.exportReportToPdfFile(jprint, "/home/ashutosh/Desktop/desktop/nikunj/JasperTestApp/output/mytest.pdf");

            JasperReport jreport2 = JasperCompileManager.compileReport(input2);
            JasperPrint jprint2 = JasperFillManager.fillReport(jreport2, new HashMap(), new JREmptyDataSource());

            JasperReport jreport3 = JasperCompileManager.compileReport(input3);
            JasperPrint jprint3 = JasperFillManager.fillReport(jreport3, new HashMap(), new JREmptyDataSource());

            List<JasperPrint> jprintlist = new ArrayList<JasperPrint>();

            jprintlist.add(jprint1);
            jprintlist.add(jprint2);
            jprintlist.add(jprint3);

            JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist);

            OutputStream output = new FileOutputStream(new File("/home/ashutosh/Desktop/desktop/nikunj/JasperTestApp/output/mytestbatch.pdf"));

            exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output);
            exporter.exportReport();

            }catch(Exception e)
            {
                e.printStackTrace();
            }

上:input1、input2、input3は入力jrxmlへの文字列パスです

JRXMLファイルが3つのメッセージを出力する場合:Hello World 1、Hello World 2、Hello World3。

 <?xml version="1.0"?>
<!DOCTYPE jasperReport
  PUBLIC "-//JasperReports//DTD Report Design//EN"
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="Simple_Report">
 <detail>
    <band height="20">
      <staticText>
        <reportElement x="180" y="0" width="200" height="20"/>
        <text><![CDATA[Hello World One!]]></text>
      </staticText>
    </band>
  </detail>
</jasperReport>

読んでくれてありがとう!

17
Vicky

Jasperprintリスト全体をエクスポートすることを利用できます。

List jpList = new ArrayList();
jpList.add(JRLoader.loadObjectFromFile("build/reports/Report1.jrprint")); 
...
JRExporter exporter = new JRPdfExporter(); 
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jpList); 
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, stream); 
exporter.exportReport();
13

この回答は、JASPER REPORT VERSION> 5.6(最新バージョン)のユーザーを支援するためのものであり、非推奨のコードを削除します。

Jasper-report5.6以降JRPdfExporterParameter.JASPER_PRINT_LIST is 非推奨 Wojtek Owczarczykの現在のコード answer は:

List<JasperPrint> jpList = new ArrayList<>();
//add your JasperPrint's from loading jrprint or more 
//commonly filling report with JasperFillManager.fillReport 

JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jpList)); //Set as export input
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(stream)); //Set output stream
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
//set your configuration
exporter.setConfiguration(configuration);
exporter.exportReport();
6
Petter Friberg

Itextのないページ番号...

private void drawPageNumbers(List<JasperPrint> listJasperPrint, int totalPages) throws JRException {

    int pageCount = 0;
    int posY = 0;
    int posX = 0;

    for (JasperPrint jasperPrint : listJasperPrint) {

        if (jasperPrint.getOrientation() == JRReport.ORIENTATION_PORTRAIT) {
            posY = 805;
            posX = 472;
        }

        if (jasperPrint.getOrientation() == JRReport.ORIENTATION_LANDSCAPE) {
            posY = 558;
            posX = 717;
        }

        for (Object obj : jasperPrint.getPages()) {

            pageCount++;
            JRPrintPage page = (JRPrintPage) obj;

            JRPrintText textTotalPages = new JRTemplatePrintText(new JRTemplateText(
                    jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
            textTotalPages.setX(posX + 54);
            textTotalPages.setY(posY);
            textTotalPages.setWidth(40);
            textTotalPages.setHeight(16);
            textTotalPages.setText(" " + totalPages);
            page.addElement(textTotalPages);

            JRPrintText textPageNumber = new JRTemplatePrintText(new JRTemplateText(
                    jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
            textPageNumber.setX(posX);
            textPageNumber.setY(posY);
            textPageNumber.setWidth(80);
            textPageNumber.setHeight(16);
            textPageNumber.setText("Página " + pageCount + " de");
            page.addElement(textPageNumber);
        }
    }

    return;
}
1
Eduardo Beninca

あなたはこれを試すことができます

JasperPrint jp1 = JasperFillManager.fillReport(reportFile1,reportParams,Connection);  
JasperPrint jp2 = JasperFillManager.fillReport(reportFile2,reportParams,Connection);  
for (int j = 0; j < jp1.getPages().size(); j++) {  
    //Add First report to second report
    jp2.addPage((JRPrintPage) jp1.getPages().get(j));  
} 
0
Madhuka Dilhan

(iReportの例)

パートI:

  • さまざまなレポートのラッパーレポートとして、新しい空白のジャスパーレポートを作成します
  • データアダプタ= 1つの空のレコード-空の行
  • 「新規...」をクリックします
  • 「空の行」を選択します
  • 「次へ」をクリックします
  • 空のレコードの数= 1(レコードでシミュレートし、1つの詳細バンドのみが印刷されます)
  • したがって、空白のレポートの準備ができていますJavaプログラムからこのレポートを呼び出すときは、最初にデータベースへのデータ接続を開き、この接続をバッ​​クグラウンドで交換します。ラッパーレポートのサブレポートはこれを継承できますパラメータによる接続!

パート2)

  • 新しい詳細バンドを埋め込みたいレポートごとに追加します。
  • 各詳細バンドにはサブレポートが含まれています(もちろん、他のスタンドアロンレポートへのリンク)
  • ラッパーレポートのサブレポート定義で、プロパティ「runtobottom」を「True」に設定します

この概念は私のために働きます。もちろん、パラメータに応じて、さまざまなバンドのオンとオフを切り替えることができます。

0
Vanden