2011-12-19 90 views
17

5つの異なるSQL照会を使用してレポートを準備する必要があります。各クエリは、1つのレポートテーブルを提供します。複数のjrxmlジャスパーレポートを1つのpdf出力ファイルに照合する方法

は、だから私は、今、私はコンパイルすることができる午前

など、5 jrxmlはそれぞれ独自の見出し、タイトルの設定、フッター、pagenumbersと上記のクエリの1つに対応するファイルを書いたプリントとのそれぞれをエクスポート5つの異なるpdfsにjrxmlsを上回ります。

ただし、クライアントはすべてのレポートを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、入力jrxmls

どこJRXMLファイルに文字列パスがINPUT3です読書のためのHello World 1、Hello Worldの2、Hello Worldの3

<?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> 

ありがとう:ちょうど3つのメッセージをプリント!

+0

アレックスKの答えは良いです。個々のレポートを1つのマスターレポートのサブレポートに入れることで、必要なものを得ることもできます。それはより多くの作業になりますが、ページ番号の要件を処理できるようになります。間違いなくこれにも投票してください。それは、あなたが何を記述しているかを正確にカバーするでしょう:http://jasperforge.org/projects/jasperreports/tracker/view.php?id=4178 – mdahlman

答えて

13

あなたは全体jasperprintリストのエクスポートを利用することができます:iTextのなし

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(); 
+1

@NikunjChauhanサンプルはこちら[http://jasperforge.org/uploads/] publish/jasperreportswebsite/trunk/sample.reference/batchexport/index.html)。 JasperReports配布パッケージの 'demo \ samples \ batchexport'フォルダ。 –

+0

@Wojtek O.:jpListを定義するには? jprintオブジェクトの単純なリストですか? – Nik

+0

@AlexK:リンクを貼り付け直してください...ありません..ありがとう! – Nik

1

ページ番号を...

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; 
} 
0

(iReportは例)

パートI:

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

パート2)

  • は、新しい詳細バンドを埋め込みたいすべてのレポートに追加します。
  • 各詳細バンドは
  • が私たちのラッパーレポート

このコンセプトのサブレポート定義でプロパティを「True」に「下にファイル名を指定して実行」に設定し(もちろん、他のスタンドアロンのレポートへのリンク)サブレポートが含まれています私のために働く。パラメータによっては に応じて、異なるバンドをオンまたはオフに切り替えることができます。

+0

私はOPがプログラム的アプローチを探していると思います... –

4

この答えは、したがって、非推奨のコードを削除し、JASPER REPORT VERSION> 5.6(最新 のバージョン)でユーザーを支援することです。ジャスパー・レポート5.6 JRPdfExporterParameter.JASPER_PRINT_LIST以来

はWojtekさんOwczarczyk answerの現在のコードがあるdeprecatedです:

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(); 
+0

注:最高品質のエクスポート(JRGraphics2DExporter)は多くのjasperPrintsでは動作しません。 Ref:JRGraphics2DExporterのソースコード – Topera

関連する問題