欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【Android Developers Training】 53. 打印HTML

系統 1916 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/printing/html-docs.html


在Android上要打印比一副照片更豐富的內容,需要將文本和圖片組合在一個打印的文檔中。Android框架提供了一種使用HTML語言來組織一個文檔并打印的方法,它使用的代碼數量是很小的。

在Android 4.4(API Level 19), WebView 類更新了,使得它可以打印HTML內容。這個類允許你加載一個本地的HTML資源或者從一個網頁下載一個頁面,創建一個打印任務,并把它交給Android打印服務。

這節課將向您展示如何快速地構建一個HTML文檔,它包含文本和圖片,并使用 WebView 來打印它。


一). 加載一個HTML文檔

WebView 打印一個HTML文檔包含加載一個HTML資源或者以String的形式構建一個HTML文檔。這一節將描述如果構建一個HTML的字符串并將它加載到 WebView 中,以備打印。

這個View對象一般被用來作為一個activity布局的一部分。然而,如果你的應用不使用一個 WebView ,你可以創建一個該類的實例,目的是為了打印。創建該自定義打印界面的主要步驟是:

  1. 在HTML資源加載完畢后,創建一個 WebViewClient 用來啟動一個打印任務。
  2. 加載HTML資源至 WebView 對象。

下面的代碼展示了如何創建一個簡單的 WebViewClient 并且加載一個動態創建的HTML文檔:

      
        private
      
      
         WebView mWebView;




      
      
        private
      
      
        void
      
      
         doWebViewPrint() {

    
      
      
        //
      
      
         Create a WebView object specifically for printing
      
      

    WebView webView = 
      
        new
      
      
         WebView(getActivity());

    webView.setWebViewClient(
      
      
        new
      
      
         WebViewClient() {



            
      
      
        public
      
      
        boolean
      
      
         shouldOverrideUrlLoading(WebView view, String url) {

                
      
      
        return
      
      
        false
      
      
        ;

            }



            @Override

            
      
      
        public
      
      
        void
      
      
         onPageFinished(WebView view, String url) {

                Log.i(TAG, 
      
      "page finished loading " +
      
         url);

                createWebPrintJob(view);

                mWebView 
      
      = 
      
        null
      
      
        ;

            }

    });



    
      
      
        //
      
      
         Generate an HTML document on the fly:
      
      

    String htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, " +

            "testing, testing...</p></body></html>"
      
        ;

    webView.loadDataWithBaseURL(
      
      
        null
      
      , htmlDocument, "text/HTML", "UTF-8", 
      
        null
      
      
        );



    
      
      
        //
      
      
         Keep a reference to WebView object until you pass the PrintDocumentAdapter

    
      
      
        //
      
      
         to the PrintManager
      
      

    mWebView =
      
         webView;

}
      
    

Note:

確保你所調用的生成打印的任務發生在在之前那一節所創建的 WebViewClient 中的 onPageFinished() 方法內。如果你不等待頁面加載完畢后再打印,打印的輸出可能會不完整或空白,甚至可能會失敗。

Note:

上面的樣例代碼維護了一個 WebView 對象實例,這樣就保證了它不會在打印任務創建之前就被垃圾回收器所回收。請確保你在你的實現中也同樣這么做,否則打印的進程可能會無法繼續執行。

如果你希望頁面中包含圖像,將這個圖像文件放置在你的工程的“ assets/ ”目錄,并指定一個基URL,作為 loadDataWithBaseURL() 方法的第一個參數,就像下面所顯示的一樣:

      webView.loadDataWithBaseURL("file:///android_asset/images/"
      
        , htmlBody,

        
      
      "text/HTML", "UTF-8", 
      
        null
      
      );
    

你也可以加載一個網頁來打印,方法是將 loadDataWithBaseURL() 方法替換為 loadUrl() ,如下所示:

      
        //
      
      
         Print an existing web page (remember to request INTERNET permission!):
      
      

webView.loadUrl("http://developer.android.com/about/index.html");
    

當使用 WebView 來創建一個打印文檔時,你要注意下面的一些限制:

  • 你不能為文檔添加頁眉和頁腳,包括頁號。
  • HTML文檔的打印選項不包含選擇打印的頁數范圍,例如:對于一個10頁的HTMl文檔,只打印2到4頁是不可以的。
  • 一個 WebView 的實例只能在同一時間處理一個打印任務。
  • 若一個HTML文檔包含CSS打印屬性,比如一個橫向屬性,是不支持的。
  • 你不能使用一個HTML文檔中的JavaScript來激活打印。

Note:

一旦 在布局中包含的 WebView 對象加載好了文檔,就可以打印 WebView 對象的內容。

如果你希望創建一個更加自定義化的打印輸出并希望可以完全控制打印頁面上繪制的內容,可以學習下一節課程: Printing a Custom Document ?


二). 創建一個打印任務

在創建了 WebView 并加載了你的HTML內容之后,你的應用就基本完成了打印進程的歸屬于它的部分的任務。下一步是訪問 PrintManager ,創建一個打印適配器,并在最后,創建一個打印任務。下面的代碼展示了如何執行這些步驟:

      
        private
      
      
        void
      
      
         createWebPrintJob(WebView webView) {



    
      
      
        //
      
      
         Get a PrintManager instance
      
      

    PrintManager printManager =
      
         (PrintManager) getActivity()

            .getSystemService(Context.PRINT_SERVICE);



    
      
      
        //
      
      
         Get a print adapter instance
      
      

    PrintDocumentAdapter printAdapter =
      
         webView.createPrintDocumentAdapter();



    
      
      
        //
      
      
         Create a print job with name and adapter instance
      
      

    String jobName = getString(R.string.app_name) + " Document"
      
        ;

    PrintJob printJob 
      
      =
      
         printManager.print(jobName, printAdapter,

            
      
      
        new
      
      
         PrintAttributes.Builder().build());



    
      
      
        //
      
      
         Save the job object for later status checking
      
      
            mPrintJobs.add(printJob);

}
      
    

這個例子保存了應用使用的 PrintJob 對象的實例,這是不必須的。你的應用可以使用這個對象來跟蹤打印任務執行時的進度。當你希望監控你應用中的打印任務是否完成,是否失敗或者是否被用戶取消, 這個方法非常有用。創建一個應用內置的通知并不必須,因為打印框架會自動的創建一個該打印任務的系統通知。

【Android Developers Training】 53. 打印HTML文檔


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲人在线 | 99亚洲视频 | 午夜不卡电影 | 国产高清视频在线观看 | xxxx亚洲 | 国产三级在线视频 一区二区三区 | 日本黄色一级片视频 | 丁香婷婷成人 | 国产一区久久久 | 亚洲天天看 | 国产成人免费 | 午夜激情影院 | 日韩精品一二三区 | 国产人妻人伦精品潘金莲 | 久久亚洲欧美日本精品品 | 久久影音先锋 | 日韩欧美视频一区二区在线观看 | 清纯唯美亚洲激情 | 国产成人久久 | 久久久久欧美精品网站 | 欧美日本国产 | 精品成人佐山爱一区二区 | 97精品国产| snh48欧洲大片在线观看 | 91免费无限观看 | 国产淫语对白在线视频 | 国产色在线 | 国产91在线免费 | 青青草视频破解版 | 日本不卡一区 | 男女啪啦猛视频免费 | 精品欧美乱码久久久久久1区2区 | 久福利 | 欧洲另类一二三四区 | 99riav在线 | 国产福利区一区二在线观看 | 91久久久久久久久久久久久久 | 日本黄页免费大片在线观看 | 色婷婷综合缴情综六月 | 日韩在线国产精品 | 91精品国产亚洲爽啪在线观看 |