var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-20738293-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script')"/>
<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jutleo
    歡迎走進有風的地方~~
    posts - 63,  comments - 279,  trackbacks - 0
    接著上篇,jasperReport 實現客戶端主要是依靠applet,但是我們所有的操作不可能在applet中實現吧,這樣也不算一個好的應用。
    考慮一下幾點:
    1. javascript 和applet互相通信。applet和前臺界面交互,可以讓客戶感覺不到有applet的存在。
    2. applet和后臺相互通信。applet既可以接受后臺轉遞的參數、對象流等等 還可以把信息返回到后臺。
    3. applet只實現打印和預覽,主要的業務操作需要在后臺完成。
    上篇中提到print.js:
    新建一jsp頁面 PrintReportApplet.jsp
    次jsp頁面就一個按鈕
    <input type="submit" value="預覽" onclick="reportViewer()" />
    這樣我們就可以在當前頁面中引用到applet了,
    document.applets.myApplet.reportViewer() 拿到applet的窗口句柄后調用applet的reportViewer()方法
    我們也可以在此jsp頁面寫一個初始化的方法傳遞參數到applet中,當然也可以直接傳遞參數到reportViewer(parameter String);
    function getParameters() 
                
    return "&pid=0001"
    }
    在print.js中指定 <PARAM NAME="CODE" VALUE="com.isoftstone.pcis.report.print.applet.PrinterApplet" />
    PrinterApplet中reportViewer
    // javascript預覽報表
        public void reportViewer() {
            
    try {
                win 
    = JSObject.getWindow(this);
                paraStr 
    = win.eval("getParameters()").toString();

                
    if ("".equals(paraStr) || paraStr == null{
                    
    return;
                }

                System.out.println(
    "paraStr=======>" + paraStr);

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

            
    if (url == null{
                
    if (requestUrl != null{
                    
    try {
                        
    /*
                         * applet與Servlet交互 URL傳遞頁面傳來的參數請求服務器Servlet
                         * 把applet傳遞的參數追加到servlet中 2008-10-14 laoshulin
                         
    */


                        url 
    = new URL(getCodeBase(), requestUrl + "?printView=true"
                                
    + paraStr);

                        
    if (url == null{
                            JOptionPane.showMessageDialog(
    this,
                                    
    "Source URL not specified");
                        }
     else {
                            InputStream in 
    = url.openStream();
                            ObjectInputStream objIn 
    = new ObjectInputStream(in);
                            Object obj 
    = objIn.readObject();
                            
    if (obj instanceof JasperPrint) {

                            }
     else {
                                JOptionPane.showMessageDialog(
    this, obj.toString());
                                
    return;
                            }


                            
    if (jasperPrint == null{
                                
    // 根據Servlet返回的URL(ObjectStream)產生JasperPrint對象
                                jasperPrint = (JasperPrint) obj;

                            }

                            
    // 攔截出現空報表問題
                            if (jasperPrint != null
                                    
    && jasperPrint.getPages().size() > 0{
                                
    /*
                                 * 調用JasperReport.jar中JasperViewer繪制報表Frame
                                 * JasperViewer繼承自JFrame,采用setDefaultCloseOperation響應關閉窗口事件
                                 
    */


                                ViewerFrame viewerFrame 
    = new ViewerFrame(this
                                        .getAppletContext(), jasperPrint);
                                
                                viewerFrame.setVisible(
    true);
                                
    //viewerFrame.show();

                                
    // JasperViewer viewer = new
                                
    // JasperViewer(jasperPrint);
                                
    // viewer.setVisible(true);
                                
    // viewer.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
                                
    // 如果請求為空彈出對話框予以提示
                            }
     else {
                                JOptionPane
                                        .showMessageDialog(
    this,
                                                
    "Please check Your Report SQL! It resulted in empty Report! ");
                                
    return;
                            }

                        }

                    }
     catch (Exception e) {
                        StringWriter swriter 
    = new StringWriter();
                        PrintWriter pwriter 
    = new PrintWriter(swriter);
                        e.printStackTrace(pwriter);
                        JOptionPane.showMessageDialog(
    this, swriter.toString());
                    }
     finally {// 全打套打URL不一樣釋放對象 by laoshulin
                        url = null;
                        jasperPrint 
    = null;
                        win 
    = null;
                    }

                }

            }

        }
    JSObject 對象的使用google一下有很多哦,requestUrl = getParameter("REPORT_URL");為print.js中配置的請求,之后我們new URL帶上我們的參數去請求遠程資源。
    <servlet-mapping>
            
    <servlet-name>ReportServlet</servlet-name>
            
    <url-pattern>/report.view</url-pattern>
        
    </servlet-mapping>
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                
    throws ServletException, IOException {
            
    try {

                
    /*
                 * Servlet中可這樣取得打印或是預覽操作,添加此功能針對套打預覽 String
                 * view=request.getParameter("printView"); boolean
                 * isView="true".equalsIgnoreCase(view)?true:false; String
                 * print=request.getParameter("print"); boolean
                 * isPrint="true".equalsIgnoreCase(print)?true:false;
                 
    */


                
    // 拿參數
                String pid = request.getParameter("pid");
                String form 
    = request.getParameter("format");
                
    // 編譯報表耗時,修改為編譯好的報表
                /*
                 * JasperReport jasperReport = JasperCompileManager
                 * .compileReport("D:\\workspace\\report\\AppletTest.jasper");
                 
    */

                
    // 直接使用編譯好的文件
    //            JasperReport jasperReport = (JasperReport) JRLoader
    //                    .loadObject("D:\\workspace\\report\\AppletTest.jasper");
                JasperReport jasperReport = (JasperReport) JRLoader
                        .loadObjectFromLocation(
    "D:\\workspace\\report\\AppletTest.jasper");
                HashMap mapParam 
    = new HashMap();
                mapParam.put(
    "imageParam""D:\\workspace\\report\\eg_smile.gif");
                
    /*
                 * 此參數用來控制是否顯示圖片
                 * 第二個參數在報表中設置為String類型
                 
    */

                mapParam.put(
    "isShowImage""true");
                
    // 生成jasperPrint對象
                JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
                        mapParam, 
    new JREmptyDataSource());
                System.out.println(jasperPrint.getPageHeight()
    +"$$$$$$$$$$$$"+jasperPrint.getPageWidth()+"**********"+jasperPrint.getPages());
                
            response.setContentType(
    "application/octet-stream");
                    response.setBufferSize(
    8986000);
                    ServletOutputStream outStream 
    = response.getOutputStream();
                    ObjectOutputStream oos 
    = new ObjectOutputStream(outStream);
                    oos.writeObject(jasperPrint);
    //                outStream.flush();
    //                oos.flush();
                    
    //                outStream.close();
    //                oos.close();
                
                
    //outStream.flush();
                
    //
            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }
    請求到遠程資源完全可以安裝業務需求實現自己的jasperReport 了,最終我們只要把一個JasperPrint對象輸出到客戶端就可以了。
    客戶端通過打開InputStream in = url.openStream();實現還原jasperPrint對象,從而實現打印或者預覽。
    客戶端打印可以前的方法是一樣的:
    編譯、填充、生成JasperPrint對象、預覽或打印
    上篇有人提到打印和預覽實現動態控制套打背景,建議你多看看 iReport+jasperReport之圖片控件 ,實現原理是一樣的,只是把JasperPrint在客戶端處理了一下哦。
    posted on 2009-12-15 19:10 凌晨風 閱讀(4580) 評論(2)  編輯  收藏 所屬分類: iReport + JasperReport 系列

    FeedBack:
    # re: iReport+jasperReport之客戶端打印 (續)
    2009-12-16 10:34 | 愛銀
    收藏  回復  更多評論
      

    <2009年12月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(11)

    我參與的團隊

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无套内谢孕妇毛片免费看看| 外国成人网在线观看免费视频| 亚洲成?v人片天堂网无码| 香蕉视频在线免费看| 911精品国产亚洲日本美国韩国| 一二三四免费观看在线电影 | 国产成人亚洲综合无码| 小草在线看片免费人成视久网| 国产精品亚洲综合久久| 国产亚洲精久久久久久无码77777| 国产91色综合久久免费| 日韩毛片一区视频免费| 亚洲国产精品午夜电影| 亚洲另类少妇17p| 91香蕉视频免费| 花蝴蝶免费视频在线观看高清版| 亚洲人配人种jizz| 亚洲精品乱码久久久久久久久久久久| 西西大胆无码视频免费| 国产激情免费视频在线观看| 亚洲av第一网站久章草| 亚洲精品乱码久久久久久下载| 亚洲精品岛国片在线观看| 久久综合AV免费观看| 男女午夜24式免费视频| 人妻无码中文字幕免费视频蜜桃| 亚洲精品**中文毛片| 亚洲狠狠婷婷综合久久久久 | 国产zzjjzzjj视频全免费| 最近的中文字幕大全免费8| 一本岛v免费不卡一二三区| 亚洲人成高清在线播放| 亚洲AV无码成人网站久久精品大| 免费欧洲美女牲交视频| 我们的2018在线观看免费高清| 在线观看免费视频网站色| 真人无码作爱免费视频| 亚洲香蕉久久一区二区三区四区| 国产亚洲精久久久久久无码| 亚洲AⅤ无码一区二区三区在线| 成人免费无码大片a毛片软件 |