黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

【Android Developers Training】 53. 打印HTML

系統(tǒng) 2252 0

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

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


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

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

這節(jié)課將向您展示如何快速地構(gòu)建一個(gè)HTML文檔,它包含文本和圖片,并使用 WebView 來(lái)打印它。


一). 加載一個(gè)HTML文檔

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

這個(gè)View對(duì)象一般被用來(lái)作為一個(gè)activity布局的一部分。然而,如果你的應(yīng)用不使用一個(gè) WebView ,你可以創(chuàng)建一個(gè)該類的實(shí)例,目的是為了打印。創(chuàng)建該自定義打印界面的主要步驟是:

  1. 在HTML資源加載完畢后,創(chuàng)建一個(gè) WebViewClient 用來(lái)啟動(dòng)一個(gè)打印任務(wù)。
  2. 加載HTML資源至 WebView 對(duì)象。

下面的代碼展示了如何創(chuàng)建一個(gè)簡(jiǎn)單的 WebViewClient 并且加載一個(gè)動(dòng)態(tài)創(chuàng)建的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:

確保你所調(diào)用的生成打印的任務(wù)發(fā)生在在之前那一節(jié)所創(chuàng)建的 WebViewClient 中的 onPageFinished() 方法內(nèi)。如果你不等待頁(yè)面加載完畢后再打印,打印的輸出可能會(huì)不完整或空白,甚至可能會(huì)失敗。

Note:

上面的樣例代碼維護(hù)了一個(gè) WebView 對(duì)象實(shí)例,這樣就保證了它不會(huì)在打印任務(wù)創(chuàng)建之前就被垃圾回收器所回收。請(qǐng)確保你在你的實(shí)現(xiàn)中也同樣這么做,否則打印的進(jìn)程可能會(huì)無(wú)法繼續(xù)執(zhí)行。

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

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

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

你也可以加載一個(gè)網(wǎng)頁(yè)來(lái)打印,方法是將 loadDataWithBaseURL() 方法替換為 loadUrl() ,如下所示:

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

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

當(dāng)使用 WebView 來(lái)創(chuàng)建一個(gè)打印文檔時(shí),你要注意下面的一些限制:

  • 你不能為文檔添加頁(yè)眉和頁(yè)腳,包括頁(yè)號(hào)。
  • HTML文檔的打印選項(xiàng)不包含選擇打印的頁(yè)數(shù)范圍,例如:對(duì)于一個(gè)10頁(yè)的HTMl文檔,只打印2到4頁(yè)是不可以的。
  • 一個(gè) WebView 的實(shí)例只能在同一時(shí)間處理一個(gè)打印任務(wù)。
  • 若一個(gè)HTML文檔包含CSS打印屬性,比如一個(gè)橫向?qū)傩裕遣恢С值摹?
  • 你不能使用一個(gè)HTML文檔中的JavaScript來(lái)激活打印。

Note:

一旦 在布局中包含的 WebView 對(duì)象加載好了文檔,就可以打印 WebView 對(duì)象的內(nèi)容。

如果你希望創(chuàng)建一個(gè)更加自定義化的打印輸出并希望可以完全控制打印頁(yè)面上繪制的內(nèi)容,可以學(xué)習(xí)下一節(jié)課程: Printing a Custom Document ?


二). 創(chuàng)建一個(gè)打印任務(wù)

在創(chuàng)建了 WebView 并加載了你的HTML內(nèi)容之后,你的應(yīng)用就基本完成了打印進(jìn)程的歸屬于它的部分的任務(wù)。下一步是訪問 PrintManager ,創(chuàng)建一個(gè)打印適配器,并在最后,創(chuàng)建一個(gè)打印任務(wù)。下面的代碼展示了如何執(zhí)行這些步驟:

      
        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);

}
      
    

這個(gè)例子保存了應(yīng)用使用的 PrintJob 對(duì)象的實(shí)例,這是不必須的。你的應(yīng)用可以使用這個(gè)對(duì)象來(lái)跟蹤打印任務(wù)執(zhí)行時(shí)的進(jìn)度。當(dāng)你希望監(jiān)控你應(yīng)用中的打印任務(wù)是否完成,是否失敗或者是否被用戶取消, 這個(gè)方法非常有用。創(chuàng)建一個(gè)應(yīng)用內(nèi)置的通知并不必須,因?yàn)榇蛴】蚣軙?huì)自動(dòng)的創(chuàng)建一個(gè)該打印任務(wù)的系統(tǒng)通知。

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論