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

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

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

    隨筆-67  評論-522  文章-0  trackbacks-0
        在前一篇"使用Flex開發時空線形圖實例詳解"中,我們得到了一張時空線形圖報表,本文將說明如何使用AlivePDF導出PDF文件。
        AlivePDF是一個用ActionScript 3寫的開源PDF開發包。它有很全的文檔和示例資料,很容易上手和學習。現在已經發布0.1.5最新版本。目前在Flex中導出PDF,大多數都采用它來實現。
        官方網站:
    http://alivepdf.bytearray.org/
        大象當時開發的時候采用的是0.1.4.9版本。AlivePDF給我們提供了一套模板化的導出方法,使用起來非常方便。

    //canvasid,這是獲得整個畫布內容的快照,返回的是一個位圖
    var bmp:BitmapData = ImageSnapshot.captureBitmapData(canvas);
    var bitmap:Bitmap = new Bitmap(bmp); //將位圖轉換為顯示對象
    /**
     * 在創建PDF對象之前,設置Size對象的詳細參數
     * 第一個參數是圖像大小數組(width,height),這里給它設定原始圖片大小
     * 第二個參數是一個字符串,相當于一個標題名
     * 第三個參數是尺寸,英寸數組(width,height)
     * 第四個參數是尺寸,毫米數組(width,height)
     */
    var autoSize:Size = new Size([bitmap.height,bitmap.width],"Tabloid",[11, 17],[279, 432]);
    /**
     創建PDF對象,設置其詳細參數
     * 第一個參數是方向,LANDSCAPE是橫向,PORTRAIT是縱向
     * 第二個參數是一個字符串,相當于一個標題名
     * 第三個參數是單位,MM是毫米
     * 第四個參數是Size對象
     */
    var myPDF:PDF = new PDF(Orientation.LANDSCAPE, Unit.MM,autoSize);
    myPDF.setDisplayMode(Display.FULL_PAGE); //顯示方式,設置為完全顯示
    myPDF.addPage();  //加入到當前頁面
    myPDF.addImage(bitmap); //把要導出的顯示對象加入進來
    /**
     生成PDF
     * 第一個參數是指定采用什么方式生成PDF,一般是REMOTE服務端生成
     * 第二個參數是服務器地址
     * 第三個參數是打開方式,ATTACHMENT是附件,INLINE是在瀏覽器中打開
     * 第四個參數是生成的PDF文件名
     */
    myPDF.save(Method.REMOTE, "http://server:port/appName/createpdf",Download.ATTACHMENT, "timespace.pdf");
        上面這些就是導出PDF的步驟,是不是很簡單?官方例子中,是沒有實例化Size對象,并對它進行參數設置的,而且使用的是固定設置,它有幾個預定義好的靜態構造對象,可以直接使用。之所以這里要自己定義,是因為我發現如果采用預定義的設置,導出的圖像不清晰。我看過Size類的源碼,特別是第一個參數,如果你準備導出的尺寸不符合預定義設置的話,最好改成自己想要導出的對象尺寸,這樣效果要好一些,另外比較重要的就是第三和第四個參數,一個是英寸一個是毫米。當時我做的時候,將預定義中的值都換著試了遍,發現如果導出的圖像比較大,這兩組值設定的比較小的話,當縮小看時,會很模糊。DOC文檔中寫的意思我沒看懂,翻譯過來就是說,這是為用戶更好的顯示不進行尺寸計算。我估計這是表示在單位面積內的像素數,不知道這樣理解對不對,如果有誤,請知道的朋友幫忙指正一下。
        服務器端使用Servlet來處理文件的導出,一般都是采用示例中提供的代碼,基本上是不需要改動的,我把代碼貼出來。

    public class CreatePDF extends HttpServlet {
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            doGet(req, resp);
        
    }
        
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
                
    throws ServletException, IOException {
            int i = 0;
            
    int k = 0;
            
    int maxLength = req.getContentLength();
            
    byte[] bytes = new byte[maxLength];
            
    String method = req.getParameter("method");
            
    String name = req.getParameter("name");
            
    ServletInputStream si = req.getInputStream();
            
    while (true) {
                
    k = si.read(bytes, i, maxLength);
                
    i += k;
                
    if (k <= 0)
                    
    break;
            
    }
            
    if (bytes != null) {
                
    ServletOutputStream stream = resp.getOutputStream();
                
    resp.setContentType("application/pdf");
                
    resp.setContentLength(bytes.length);
                
    resp.setHeader("Content-Disposition", method + ";filename=" + name);
                
    stream.write(bytes);
                
    stream.flush();
                
    stream.close();
            
    } else {
                
    resp.setContentType("text");
                
    resp.getWriter().write("bytes is null");
            
    }
        
    }
    }
        記得要在web.xml文件里加上servlet配置
    <servlet>
        
    <servlet-name>createPDF</servlet-name>
        
    <servlet-class>com.bolo.common.CreatePDF</servlet-class>

    </servlet>
    <servlet-mapping>
        
    <servlet-name>createPDF</servlet-name>
        
    <url-pattern>/createpdf</url-pattern>
    </servlet-mapping>

        OK,使用AlivePDF導出PDF文件講完了,如果有什么不清楚的,或是我說的不對的地方,請大家提出來。謝謝。
        
    本文為菠蘿大象原創,如要轉載請注明出處。
    posted on 2010-03-01 13:13 菠蘿大象 閱讀(6949) 評論(23)  編輯  收藏 所屬分類: Flex

    評論:
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-04-16 17:30 | leke_斌
    你好 請問你知道Flex中怎么保存為word或ppt文件么,現在保存word我是這樣做的,在flex中發送請求及傳遞參數,后臺處理數據并轉至servlet導出,但不知flex是點擊按鈕后是怎么一種方式請求,用HTTPService請求  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-04-16 22:39 | 菠蘿大象
    @leke_斌
    對于你的問題我有點看不明白。你是想導出word或ppt格式的文件?還是想弄清楚請求方式?你好像又說,你現在已經實現了這部分的功能。真的不知道你的問題是什么。  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-04-19 15:55 | leke_斌
    不好意思,我表達的不清楚,是這樣的,我需要實現以下在flex中導出內容至WORD、PDF、PPT功能,其中我已經實現了WORD,想請問你觸發什么條件導出PDF,然后你這有沒有導出PPT的例子  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-04-19 21:42 | 菠蘿大象
    @leke_斌
    導出PDF就是用這個SWC庫,這肯定需要一個事件來觸發了。我用的是click事件。代碼就是我寫的這些,把它們放到事件回調函數里面就可以了。目前我只做過PDF的導出,還沒做過PPT的導出。另外請問下,你的WORD導出是怎么實現的?最后補充一下,年后換了一家公司,目前沒有繼續搞FLEX開發了,我其實對FLEX沒有太深的研究,希望我目前知道的東西對你有幫助,也請分享一下成功的經驗,互相學習。  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-04-20 09:03 | leke_斌
    非常不好意思,再次打擾你。word導出也是和你的處理方式一樣,在flex中觸發添加事件,請求至后臺java,采用控件jacob來實現功能?,F在我導出pdf遇到點問題, req.getContentLength();得到值為-1,根據我的判斷,有兩種可能性,一是flex端jar程序我沒有全部導全,二是sevlet操作代碼修改。
    我現在使用的是AlivePDF0.1.5,只使用了org/alivepdf的內容,不知是否正常,你有遇到內容為-1問題么  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-04-20 11:39 | leke_斌
    現在可以導出PDF,郁悶,問題在于第一次請求sevlet時req.getContentLength有值,而根據電腦的一些設置點擊"是否下載文件"對話框時文件自動關聯迅雷,則第二次請求則為-1值,下載不出來  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-04-20 12:46 | 菠蘿大象
    @leke_斌
    這個導出還跟瀏覽器有關,我在IE7上面測試過,因為安全級別的問題,點導出會沒反應,而IE6就沒問題。至于你說的關聯迅雷后,第二次點擊出現的-1情況我沒有測試過呢!按理說,應該是同一個請求。沒有這個環境實在不好說。在flex里面用調試工具測試一下吧,第二次請求時,bitmap是否為null  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-07-18 21:02 | junlin
    你好,你這里有alivepdf生成的pdf嗎?我想看看打印的效果。  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-07-19 08:54 | 菠蘿大象
    @junlin
    這位同學,我怎樣讓你看到打印效果?其實在前一篇的時空線性圖里面,我截取的幾張圖片就是打印后的效果,里面還有打印及預覽導出等等功能,導出后的PDF和圖片顯示是一樣的。就是要注意你的Size對象設置參數,這會影響你最終的打印效果。  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-08-14 09:55 | junlin
    @leke_斌
    你好,alivePdf打印的問題解決了嗎?sevlet時req.getContentLength的值為什么總是-1呢?  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-08-14 10:45 | junlin
    @菠蘿大象
    你好,我使用pdf的 save方法傳到servlet接收到的總是req.getContentLength的值是-1,(我是向java后臺傳的)
    你有alivepdf例子嗎,發我一份好吧,
    在向servlet提交的時候瀏覽器的url能發給我看看嗎?
    謝謝!
    另外,您有qq嗎?想加您為好友  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-08-15 17:00 | 菠蘿大象
    @junlin
    傳給servlet的URL地址我已經在文章中的寫出了,就是save方法中的那個,你應該調試下FLEX代碼,你能確定要打印的東西真的截取到了么?bitmap是否為null?  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-08-15 18:53 | junlin
    @菠蘿大象


    呵呵 ,感謝回復。

    是這樣的,我指的url是提交之后彈出的頁面的url

    我的彈出頁面url是:http://127.0.0.1:8088/auditfms/print.do?name=print.pdf&method=inline?%PDF-1.51%200%20obj<</Type%20/Pages/Kids%20[3%200%20R]/Count%201>>endobj3%200%20obj<</Type%20/Page/Parent%201%200%20R/MediaBox%20[0%200%20841.89%20595.28]/Resources%202%200%20R/Rotate%200/Contents%204%200%20R>>endobj4%200%20obj<</Length%20108>>streamBT%20/F1%209.00%20Tf%20ET/GS0%20gs1.000%200.000%200.000%201.000%200.000%200.000%20cmq%2074.00%200%200%2052.00%2028.35%20514.93%20cm/I1%20Do%20Qendstreamendobj5%200%20obj<</Type%20/OCG%20/Name%20(print)/Usage%20<</Print%20<</PrintState%20/ON>>%20/View%20<</ViewState%20/OFF>>>>>>endobj6%200%20obj<</Type%20/OCG%20/Name%20(view)/Usage%20<</Print%20<</PrintState%20/OFF>>%20/View%20<</ViewState%20/ON>>>>>>endobj7%200%20obj<</Type%20/ExtGState/BM%20/Normal/ca%201/n%207/SA%20true/CA%201>>endobj8%200%20obj<</Type%20/Font/BaseFont%20/Helvetica/Subtype%20/Type1/Encoding%20/WinAnsiEncoding>>endobj9%200%20obj<</Type%20/XObject/Subtype%20/Image/Width%2074/Height%2052/ColorSpace%20/DeviceRGB/BitsPerComponent%208/Filter%20/FlateDecode/DecodeParms%20<</Predictor%2015%20/Colors%203%20/BitsPerComponent%208%20/Columns%2074>>/Length%201006>>streamx隉榹HSa瓶/Z濂以(?誆??2?$*?慇Ks^?琇思0Sgj諗靆t肒7o婮M訰粻i鍛歸苕?%層皂?阷伢撬?繯{蝟l闞誮u?劷?€b貍)憷q:p?P$W惠S吂宷? ;H<N緩F

    是這些內容。

    調試多次,確實bitMap是有的,不是null.


      回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-08-16 08:52 | 菠蘿大象
    @junlin
    現在我沒這個環境重試我的這個應用了,但我當時做的時候,是沒有這么長的URL的,點擊導出后,直接彈出下載的窗口,你這種情況真奇怪啊。加我QQ9174265,我們討論一下,不過我先說好,我不是專業做FLEX的,以前項目中有用到,這樣才學了些,不能幫你解決問題請不要見怪  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-09-16 16:30 | 可以用ASP.NET導出
    AlivePDF+FLex+ASP.NET 可以用ASP.NET導出嗎?  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-09-16 16:53 | 菠蘿大象
    @可以用ASP.NET導出
    呃。。。這個我不清楚,大象一直做的都是Java開發,對.Net不熟,對不住??!  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解[未登錄] 2010-09-17 11:46 | jack
    哈哈我用AlivePDF+java可以到處,但是到了ASP.NET中死活獲取不到流。  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-11-24 10:31 | 小房
    @leke_斌
    你好!你的打印word格式的方法能夠分享下嗎?
    謝謝!  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2010-11-24 15:01 | 菠蘿大象
    @小房
    你好,我沒做打印word,當時的需求只是導出為pdf,后來換了工作,這部分就移交出去了,抱歉,我幫不了你。  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2011-02-11 11:38 | lyric、
    請問大家中文問題解決了嗎?  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2011-02-11 11:38 | lyric、
    請問中文問題解決了嗎?  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2015-12-23 17:23 | 孤帆
    您好,我希望能利用alivepdf生成pdf,并利用flash的打印功能打印文件
    1.pdf可以保存在本地,也可不保存
    2.服務器用的是jasperreport所以支持很多格式(pdf、xml)的輸出
    請問,客戶端flash怎么樣才能實現  回復  更多評論
      
    # re: 在Flex中使用AlivePDF導出PDF實例詳解 2015-12-25 09:58 | 菠蘿大象
    @孤帆
    你的問題和AlivePDF沒什么關系吧,你這是怎么實現你的功能的問題。另外我從2010年開始就沒再搞FLEX了,現在差不多都忘光了。^_^  回復  更多評論
      
    主站蜘蛛池模板: 国产精品99精品久久免费| 亚洲国产精品嫩草影院久久| 西西大胆无码视频免费| 国产福利电影一区二区三区,亚洲国模精品一区 | 久久精品成人免费国产片小草| 一级特级女人18毛片免费视频| 美女被免费视频网站| 精品四虎免费观看国产高清午夜| a级毛片高清免费视频| 色老头永久免费网站| 在线免费观看中文字幕| 亚洲精品尤物yw在线影院| 久久影视国产亚洲| 亚洲欧洲自拍拍偷午夜色| 亚洲精品无码成人片久久不卡| 中文字幕免费观看全部电影| 国产精品成人观看视频免费 | 久久亚洲精品国产精品婷婷| 国产精品成人免费观看| 色窝窝免费一区二区三区| 久久久久亚洲av毛片大| 亚洲国产精品久久丫| 国产真人无码作爱免费视频| 精品免费久久久久久成人影院| 亚洲AV无一区二区三区久久| 欧洲乱码伦视频免费国产| 我想看一级毛片免费的| 亚洲国产一区在线| 免费一区二区无码东京热| 在线亚洲人成电影网站色www| 蜜芽亚洲av无码一区二区三区| 97视频免费在线| 久久久久亚洲av无码专区喷水| 色多多免费视频观看区一区| 免费A级毛片无码久久版| 国产精品亚洲专区无码不卡| 亚洲毛片不卡av在线播放一区| 国产久爱免费精品视频| 无码专区—VA亚洲V天堂| 成人免费一区二区无码视频| 国产AV无码专区亚洲AV琪琪|