如何在 android webview 中添加打印支持
How to add print support in android webview
大家好,我已经使用 android webview 创建了一个 android 应用程序。
在我加载到 webview 的 url 中,某些地方有打印选项。其实我有
坚持 this tutorial。谁能告诉我在哪里可以实现 doWebViewPrint() 方法
在我的项目中。如果有人知道更好的教程网站意味着请告诉我
这是我的主要活动
public class MainActivity extends AppCompatActivity {
public WebView webView;
public WebView mWebView
ProgressBar progressBar;
ArrayList<PrintJob> printJobs = new ArrayList<PrintJob>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView)findViewById(R.id.web);
progressBar = (ProgressBar)findViewById(R.id.progressBar1);
webView.setWebViewClient(new overload());
setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favion){
super.onPageStarted(view,url,favion);
setProgressBarVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(final WebView view, String url) {
//hide loading image
findViewById(R.id.imageLoading1).setVisibility(View.GONE);
//hide progressbar
setProgressBarVisibility(View.GONE);
//show webview
findViewById(R.id.web).setVisibility(View.VISIBLE);
// doWebViewPrint();
}
});
webView.loadUrl(url);
webView.loadUrl("javascript:var footer = document.getElementById(\"footer\"); footer.parentNode.removeChild(footer); ");
WebSettings webSettings = webView.getSettings();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webSettings.setAllowUniversalAccessFromFileURLs(true);
}
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
}
private void doWebViewPrint() {
// Create a WebView object specifically for printing
WebView webView = new WebView(MainActivity.this);
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;
}
private void createWebPrintJob(WebView webView) {
// Get a PrintManager instance
PrintManager printManager = (PrintManager) MainActivity.this
.getSystemService(Context.PRINT_SERVICE);
String jobName = getString(R.string.app_name) + " Document";
// Get a print adapter instance
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName);
// Create a print job with name and adapter instance
PrintJob printJob = printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
printJobs.add(printJob);
}
}
您不需要调用 doWebViewPrint()
方法,您已经按照自己的风格完成了该部分。页面加载完成后调用 createWebPrintJob(view)
方法。
像这样修改您的代码,例如:
webView.setWebViewClient(new overload());
setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favion){
super.onPageStarted(view,url,favion);
setProgressBarVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(final WebView view, String url) {
//hide loading image
findViewById(R.id.imageLoading1).setVisibility(View.GONE);
//hide progressbar
setProgressBarVisibility(View.GONE);
//show webview
findViewById(R.id.web).setVisibility(View.VISIBLE);
createWebPrintJob(view);//***
}
});
webView.loadUrl(url);
大家好,我已经使用 android webview 创建了一个 android 应用程序。 在我加载到 webview 的 url 中,某些地方有打印选项。其实我有 坚持 this tutorial。谁能告诉我在哪里可以实现 doWebViewPrint() 方法 在我的项目中。如果有人知道更好的教程网站意味着请告诉我
这是我的主要活动
public class MainActivity extends AppCompatActivity {
public WebView webView;
public WebView mWebView
ProgressBar progressBar;
ArrayList<PrintJob> printJobs = new ArrayList<PrintJob>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView)findViewById(R.id.web);
progressBar = (ProgressBar)findViewById(R.id.progressBar1);
webView.setWebViewClient(new overload());
setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favion){
super.onPageStarted(view,url,favion);
setProgressBarVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(final WebView view, String url) {
//hide loading image
findViewById(R.id.imageLoading1).setVisibility(View.GONE);
//hide progressbar
setProgressBarVisibility(View.GONE);
//show webview
findViewById(R.id.web).setVisibility(View.VISIBLE);
// doWebViewPrint();
}
});
webView.loadUrl(url);
webView.loadUrl("javascript:var footer = document.getElementById(\"footer\"); footer.parentNode.removeChild(footer); ");
WebSettings webSettings = webView.getSettings();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webSettings.setAllowUniversalAccessFromFileURLs(true);
}
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
}
private void doWebViewPrint() {
// Create a WebView object specifically for printing
WebView webView = new WebView(MainActivity.this);
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;
}
private void createWebPrintJob(WebView webView) {
// Get a PrintManager instance
PrintManager printManager = (PrintManager) MainActivity.this
.getSystemService(Context.PRINT_SERVICE);
String jobName = getString(R.string.app_name) + " Document";
// Get a print adapter instance
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName);
// Create a print job with name and adapter instance
PrintJob printJob = printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
printJobs.add(printJob);
}
}
您不需要调用 doWebViewPrint()
方法,您已经按照自己的风格完成了该部分。页面加载完成后调用 createWebPrintJob(view)
方法。
像这样修改您的代码,例如:
webView.setWebViewClient(new overload());
setProgressBarVisibility(View.VISIBLE);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favion){
super.onPageStarted(view,url,favion);
setProgressBarVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(final WebView view, String url) {
//hide loading image
findViewById(R.id.imageLoading1).setVisibility(View.GONE);
//hide progressbar
setProgressBarVisibility(View.GONE);
//show webview
findViewById(R.id.web).setVisibility(View.VISIBLE);
createWebPrintJob(view);//***
}
});
webView.loadUrl(url);