さて、十分なプレリュード、始めましょう。 投稿のタイトルに基づいて、ナレーションは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
- bsh.jar
- commons-collections-3.1.jar
- commons-digester-1.7.jar
- commons-fileupload.jar
- commons-io.jar
- commons-lang-2.5.jar
- commons-logging-1.1.1.jar
- fckez.jar
- groovy.jar
- iText-2.1.0.jar
- jasperreports-3.7.6.jar
- jruby.jar
- js.jar
- jython.jar
- sapphire.jar
- silvertail.jar
- zcommon.jar
- zcommons-el.jar
- zhtml.jar
- zk.jar
- zkplus.jar
- zul.jar
- zweb.jar
breeze.jar、sapphire.jar、silvertail.jarファイルはスキンであるため、サーバーに置く必要はありません。