<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開發(fā)時空線形圖實(shí)例詳解"中,我們得到了一張時空線形圖報表,本文將說明如何使用AlivePDF導(dǎo)出PDF文件。
        AlivePDF是一個用ActionScript 3寫的開源PDF開發(fā)包。它有很全的文檔和示例資料,很容易上手和學(xué)習(xí)。現(xiàn)在已經(jīng)發(fā)布0.1.5最新版本目前在Flex中導(dǎo)出PDF,大多數(shù)都采用它來實(shí)現(xiàn)。
        官方網(wǎng)站:
    http://alivepdf.bytearray.org/
        大象當(dāng)時開發(fā)的時候采用的是0.1.4.9版本。AlivePDF給我們提供了一套模板化的導(dǎo)出方法,使用起來非常方便。

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

    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導(dǎo)出PDF文件講完了,如果有什么不清楚的,或是我說的不對的地方,請大家提出來。謝謝。
        
    本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。
    posted on 2010-03-01 13:13 菠蘿大象 閱讀(6949) 評論(23)  編輯  收藏 所屬分類: Flex

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


    呵呵 ,感謝回復(fù)。

    是這樣的,我指的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

    是這些內(nèi)容。

    調(diào)試多次,確實(shí)bitMap是有的,不是null.


      回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2010-08-16 08:52 | 菠蘿大象
    @junlin
    現(xiàn)在我沒這個環(huán)境重試我的這個應(yīng)用了,但我當(dāng)時做的時候,是沒有這么長的URL的,點(diǎn)擊導(dǎo)出后,直接彈出下載的窗口,你這種情況真奇怪啊。加我QQ9174265,我們討論一下,不過我先說好,我不是專業(yè)做FLEX的,以前項(xiàng)目中有用到,這樣才學(xué)了些,不能幫你解決問題請不要見怪  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2010-09-16 16:30 | 可以用ASP.NET導(dǎo)出
    AlivePDF+FLex+ASP.NET 可以用ASP.NET導(dǎo)出嗎?  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2010-09-16 16:53 | 菠蘿大象
    @可以用ASP.NET導(dǎo)出
    呃。。。這個我不清楚,大象一直做的都是Java開發(fā),對.Net不熟,對不住啊!  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解[未登錄] 2010-09-17 11:46 | jack
    哈哈我用AlivePDF+java可以到處,但是到了ASP.NET中死活獲取不到流。  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2010-11-24 10:31 | 小房
    @leke_斌
    你好!你的打印word格式的方法能夠分享下嗎?
    謝謝!  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2010-11-24 15:01 | 菠蘿大象
    @小房
    你好,我沒做打印word,當(dāng)時的需求只是導(dǎo)出為pdf,后來換了工作,這部分就移交出去了,抱歉,我?guī)筒涣四恪?nbsp; 回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2011-02-11 11:38 | lyric、
    請問大家中文問題解決了嗎?  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2011-02-11 11:38 | lyric、
    請問中文問題解決了嗎?  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2015-12-23 17:23 | 孤帆
    您好,我希望能利用alivepdf生成pdf,并利用flash的打印功能打印文件
    1.pdf可以保存在本地,也可不保存
    2.服務(wù)器用的是jasperreport所以支持很多格式(pdf、xml)的輸出
    請問,客戶端flash怎么樣才能實(shí)現(xiàn)  回復(fù)  更多評論
      
    # re: 在Flex中使用AlivePDF導(dǎo)出PDF實(shí)例詳解 2015-12-25 09:58 | 菠蘿大象
    @孤帆
    你的問題和AlivePDF沒什么關(guān)系吧,你這是怎么實(shí)現(xiàn)你的功能的問題。另外我從2010年開始就沒再搞FLEX了,現(xiàn)在差不多都忘光了。^_^  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲色成人中文字幕网站| 亚洲日韩乱码中文无码蜜桃 | 亚洲日日做天天做日日谢| 日韩免费观看视频| 美女被免费网站91色| 亚洲天堂中文字幕在线观看| 免费的一级片网站| 国产白丝无码免费视频| 在线a亚洲老鸭窝天堂av高清| 婷婷亚洲天堂影院| 1000部拍拍拍18勿入免费凤凰福利| 久久精品熟女亚洲av麻豆| 亚洲第一区香蕉_国产a| 日本免费电影一区| 6080午夜一级毛片免费看6080夜福利 | 亚洲色图视频在线观看| 天堂亚洲免费视频| 69成人免费视频| 最新亚洲成av人免费看| 亚洲熟妇AV日韩熟妇在线| 亚洲av中文无码乱人伦在线播放 | 亚洲综合久久一本伊伊区| 亚洲人成色777777在线观看| 大陆一级毛片免费视频观看i| 亚洲国产成人在线视频 | 一区二区三区四区免费视频 | 亚洲国产精品无码成人片久久| 无码中文在线二区免费| 国产免费A∨在线播放| 亚洲乱亚洲乱妇无码| 亚洲综合精品一二三区在线| 亚洲精品无码专区久久同性男| 无码中文在线二区免费| 久久久久久国产精品免费免费男同 | 亚洲中文字幕久久精品无码A| 亚洲av无码乱码国产精品| 亚洲国产精品成人久久蜜臀| 男男AV纯肉无码免费播放无码| 久久99热精品免费观看动漫 | 永久免费在线观看视频| 热久久这里是精品6免费观看|