【问题标题】:How to take printout from android app?如何从 android 应用程序中获取打印输出?
【发布时间】:2014-03-24 07:12:49
【问题描述】:

嗨,在我的应用程序中,我想打印出我的 webview 页面,即 html 页面。谁能告诉我我做错了什么。我的问题是代码在 emultor 中运行,而不是在任何其他设备中。

MainActivity.java:

package com.example.print1;

import android.os.Build;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;

import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintManager;
import android.content.Context;

@SuppressLint("NewApi")
public class MainActivity extends Activity {

    private WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web_print);

            WebView webView = new WebView(this);
            webView.setWebViewClient(new WebViewClient() {

               public boolean shouldOverrideUrlLoading(WebView view, 
                              String url) 
           {
                    return false;     
               }

               @Override
               public void onPageFinished(WebView view, String url) {
                    createWebPrintJob(view);
                    myWebView = null;
                }
        });

        String htmlDocument = 
                   "<html><body><h1>Android Print Test</h1><p>" 
                + "This is some sample content.</p></body></html>";

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

        myWebView = webView;
    }
    @TargetApi(19)
    @SuppressLint("NewApi")
    private void createWebPrintJob(WebView webView) {

        PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE);

        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();

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

        printManager.print(jobName, printAdapter,new PrintAttributes.Builder().build());
    }
}

WebPrintActivity.java

package com.example.print1;
import android.os.Bundle;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintManager;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;

public class WebPrintActivity extends Activity {

    private WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myWebView = (WebView) findViewById(R.id.webView1);

        myWebView.loadUrl("http://developer.android.com/google/index.html");
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
               case R.id.action_print:
                createWebPrintJob(myWebView);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    private void createWebPrintJob(WebView webView) {

        PrintManager printManager = (PrintManager) this
              .getSystemService(Context.PRINT_SERVICE);

        PrintDocumentAdapter printAdapter = 
                 webView.createPrintDocumentAdapter();

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

        printManager.print(jobName, printAdapter,
               new PrintAttributes.Builder().build());
    }
}

上面的代码在模拟器中运行,但模拟器中没有wifi,如果相同的代码在android设备中运行意味着它显示错误并且它没有显示正确的输出,我也想从android中获取打印输出。 谢谢。

【问题讨论】:

  • 如果有人知道如何打印多份,请告诉我同样的,因为在这段代码中我们只能打印一份,但我必须打印两份。所以如果有人知道,请建议我。

标签: android printing


【解决方案1】:

打印框架仅适用于 api 级别 19 及以上 (android kitkat)。

 private void createWebPrintJob(WebView webView) {
  if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
 {

        PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE);

        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();

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

        printManager.print(jobName, printAdapter,new PrintAttributes.Builder().build());
 }
    }

【讨论】:

  • 嗨,prasad,你能告诉我我会做什么吗?我是 Android 应用程序开发的新手
  • 嗨,如果条件它在我的设备中运行,但没有显示 html 代码 id,请告诉我我做错了什么
  • 您想在 xml 中添加 webview 或您的线性布局,如 LinearLayout layout = (LinearLayout) findViewById(R.id.linear); layout.addView(yourwebview);
  • 您正在使用 MainACtivity 或 WebPrintActivity 哪个活动?
  • 您好,我在 WebPrintActivity 中使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多