JasperReport + ZKを1セントも使わずに統合

すべての良い一日。 この優れたフレームワークzkを学び始めたのは2年前のことでしたが、もちろんロシア人に会うこともありませんでした。 しかし、彼は非常に入門的だったので(書面を書くことを気にかけた尊敬者にとっては不快ではありませんでした)、彼は1つの情報源、彼ら自身のフォーラムに頼らなければなりませんでした。 したがって、私の目標は、ロシア語のチュートリアルの入手可能性におけるこの大きなギャップを埋めることです。



さて、十分なプレリュード、始めましょう。 投稿のタイトルに基づいて、ナレーションはJasperReportとzkの統合に関するものであり、この統合は予算に問題がないことは明らかです。 ここを見る 、このような不快なフレーズを見つけることができるので、この機能にはZK PEまたはEEが必要です。

CE、PE、およびEEライセンスについては、それぞれのWebサイトで読むことができます。要するに、CEのみが無料です。 しかし、ほとんどすべてのアプリケーションで、レポートを生成してユーザーに出力する機能を実装する必要がある場合の対処方法。 この状況から抜け出す方法はいくつかあります。1つ目はPEまたはEEの支払いで、2つ目はここで説明します。



遠くから、つまりジャスパーのコンパイルされたクラスから始めましょう。 これらの目的のために、 iReport製品を使用することをお勧めします。iReport製品は、レポートの設計、コンパイル、プレビューに優れたエディターです。 JasperReportでレポートを生成する方法については説明しません。これにはロシア語のヘルプもたくさんあるからです。 その結果、拡張子が.jasperのコンパイル済みレポートが作成されます。 素晴らしいですが、今のところは、それを忘れて、統合コードを数行書きましょう。



簡単にするために、zkプロジェクトを作成し、WebContentで、もちろんそれ自体が自動的に生成されなかった場合、index.zulファイルを作成し、次の行を記述します。

<window title="ZK+JasperReport" border="normal" width="100%" use="ui.component.Main" id="wndMainForm"> <label value="view report" /> <toolbarbutton label="show->" onClick="wndMainForm.onShowMessage()" /> <iframe id="iframe" width="100%" height="90%"/> </window>
      
      







さらに継承されたクラスで、レポートを生成する手順をpdfで記述し、すべてがうまくいった場合はフォームに表示します。

 package ui.component; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.Connection; 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 org.zkoss.util.media.AMedia; import org.zkoss.zul.Iframe; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Window; public class Main extends Window { private static final long serialVersionUID = 1L; public void onShowMessage() throws InterruptedException { try { JasperPrint print = JasperFillManager.fillReport("  /HelloWorld.jasper", null); JasperExportManager.exportReportToPdfFile(print, "  /HelloWorld.pdf"); Iframe iframe = (Iframe) this.getFellow("iframe"); File f = new File("  /HelloWorld.pdf"); byte[] buffer = new byte[(int) f.length()]; FileInputStream fs = new FileInputStream(f); fs.read(buffer); fs.close(); ByteArrayInputStream is = new ByteArrayInputStream(buffer); AMedia amedia = new AMedia("HelloWorld.pdf", "pdf", "application/pdf", is); iframe.setContent(amedia); } catch (IOException e) { Messagebox.show("   "); e.printStackTrace(); } catch (JRException e) { Messagebox.show("   pdf-"); e.printStackTrace(); } } }
      
      





ちょっとした注意:コンパイルされたクラスにパラメーターと接続文字列を渡したい場合は、たとえば次のコードを使用できます。

 HashMap<String, String> hm = new HashMap<String, String>(); hm.put("dateStart", new SimpleDateFormat("HH:mm:ss").format(dbStart.getValue())); hm.put("pCommand", "\" \""); Connection conn = ;// ,     ,      JasperPrint print = JasperFillManager.fillReport("  /HelloWorld.jasper",hm,conn );
      
      





まあ、それは非常にシンプルで簡単です。

PS zulマークアップ、コード、またはフレームワーク全般について質問がある場合は、質問してください-コメント内のすべての質問に答えようとします

ああ、私はほとんど忘れていました。 以下に、機能させるために必要なすべてのライブラリのリストを示します。



breeze.jar、sapphire.jar、silvertail.jarファイルはスキンであるため、サーバーに置く必要はありません。



All Articles