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
    歡迎走進(jìn)有風(fēng)的地方~~
    posts - 63,  comments - 279,  trackbacks - 0
    接著上篇,jasperReport 實(shí)現(xiàn)客戶端主要是依靠applet,但是我們所有的操作不可能在applet中實(shí)現(xiàn)吧,這樣也不算一個(gè)好的應(yīng)用。
    考慮一下幾點(diǎn):
    1. javascript 和applet互相通信。applet和前臺(tái)界面交互,可以讓客戶感覺不到有applet的存在。
    2. applet和后臺(tái)相互通信。applet既可以接受后臺(tái)轉(zhuǎn)遞的參數(shù)、對(duì)象流等等 還可以把信息返回到后臺(tái)。
    3. applet只實(shí)現(xiàn)打印和預(yù)覽,主要的業(yè)務(wù)操作需要在后臺(tái)完成。
    上篇中提到print.js:
    新建一jsp頁面 PrintReportApplet.jsp
    次jsp頁面就一個(gè)按鈕
    <input type="submit" value="預(yù)覽" onclick="reportViewer()" />
    這樣我們就可以在當(dāng)前頁面中引用到applet了,
    document.applets.myApplet.reportViewer() 拿到applet的窗口句柄后調(diào)用applet的reportViewer()方法
    我們也可以在此jsp頁面寫一個(gè)初始化的方法傳遞參數(shù)到applet中,當(dāng)然也可以直接傳遞參數(shù)到reportViewer(parameter String);
    function getParameters() 
                
    return "&pid=0001"
    }
    在print.js中指定 <PARAM NAME="CODE" VALUE="com.isoftstone.pcis.report.print.applet.PrinterApplet" />
    PrinterApplet中reportViewer
    // javascript預(yù)覽報(bào)表
        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傳遞頁面?zhèn)鱽淼膮?shù)請(qǐng)求服務(wù)器Servlet
                         * 把a(bǔ)pplet傳遞的參數(shù)追加到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{
                                
    // 根據(jù)Servlet返回的URL(ObjectStream)產(chǎn)生JasperPrint對(duì)象
                                jasperPrint = (JasperPrint) obj;

                            }

                            
    // 攔截出現(xiàn)空?qǐng)?bào)表問題
                            if (jasperPrint != null
                                    
    && jasperPrint.getPages().size() > 0{
                                
    /*
                                 * 調(diào)用JasperReport.jar中JasperViewer繪制報(bào)表Frame
                                 * JasperViewer繼承自JFrame,采用setDefaultCloseOperation響應(yīng)關(guān)閉窗口事件
                                 
    */


                                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);
                                
    // 如果請(qǐng)求為空彈出對(duì)話框予以提示
                            }
     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不一樣釋放對(duì)象 by laoshulin
                        url = null;
                        jasperPrint 
    = null;
                        win 
    = null;
                    }

                }

            }

        }
    JSObject 對(duì)象的使用google一下有很多哦,requestUrl = getParameter("REPORT_URL");為print.js中配置的請(qǐng)求,之后我們new URL帶上我們的參數(shù)去請(qǐng)求遠(yuǎn)程資源。
    <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中可這樣取得打印或是預(yù)覽操作,添加此功能針對(duì)套打預(yù)覽 String
                 * view=request.getParameter("printView"); boolean
                 * isView="true".equalsIgnoreCase(view)?true:false; String
                 * print=request.getParameter("print"); boolean
                 * isPrint="true".equalsIgnoreCase(print)?true:false;
                 
    */


                
    // 拿參數(shù)
                String pid = request.getParameter("pid");
                String form 
    = request.getParameter("format");
                
    // 編譯報(bào)表耗時(shí),修改為編譯好的報(bào)表
                /*
                 * 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");
                
    /*
                 * 此參數(shù)用來控制是否顯示圖片
                 * 第二個(gè)參數(shù)在報(bào)表中設(shè)置為String類型
                 
    */

                mapParam.put(
    "isShowImage""true");
                
    // 生成jasperPrint對(duì)象
                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();
            }

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

    FeedBack:
    # re: iReport+jasperReport之客戶端打印 (續(xù))
    2009-12-16 10:34 | 愛銀

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

    常用鏈接

    留言簿(11)

    我參與的團(tuán)隊(duì)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    收藏夾

    圍脖

    最新隨筆

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 成视频年人黄网站免费视频| 亚洲乱码国产一区网址| 亚洲av日韩精品久久久久久a| 免费一级毛片不卡在线播放| 久久国产精品成人免费 | 久久亚洲精品无码av| 中文字幕亚洲一区二区va在线| 亚洲精品在线免费看| 国产天堂亚洲精品| 亚洲精品高清国产一久久| 午夜一区二区免费视频| 亚洲免费观看视频| 亚洲av无码专区首页| 久久精品亚洲一区二区三区浴池| 日韩视频在线免费观看| 日本免费污片中国特一级| 国产精品亚洲精品爽爽| 亚洲理论片在线观看| 久久夜色精品国产亚洲av| 毛片免费在线视频| 国产成人免费视频| 一边摸一边桶一边脱免费视频 | 亚洲视频一区网站| 国产成人亚洲精品91专区手机| 国产免费不卡v片在线观看| 日本三级在线观看免费| 色屁屁www影院免费观看视频| 日本久久久久亚洲中字幕| 丁香五月亚洲综合深深爱| 日本19禁啪啪无遮挡免费动图| 亚洲免费闲人蜜桃| 成人影片一区免费观看 | 午夜一区二区免费视频| 91视频免费网址| a级毛片高清免费视频| 色费女人18女人毛片免费视频| 亚洲午夜精品久久久久久app| 久久丫精品国产亚洲av| 亚洲AV无码一区二区乱子伦 | 全免费a级毛片免费**视频| 2021在线观看视频精品免费|