我有一个通过WebView显示的报告(采用html格式)。通过应用查看时,报告很好。但是,当我单击“打印”(使用提供的PrintManager功能)按钮时,“打印预览”页面缺少图表,即WebView上显示的图像。
我是一个新手,因此非常感谢您的帮助。
private void loadWebView(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
final WebView webView = new WebView(NewReportView.this);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setDomStorageEnabled(true);
}
webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
webSettings.setPluginState(WebSettings.PluginState.ON_DEMAND);
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
//Current-Report
final JSONObject reportJson = new JSONObject();
try {
reportJson.put("Current-Report", jsonDataCurr);
reportJson.put("Previous-Report", jsonDataPrev);
reportJson.put("Master-Info", jsonDataMasterInfo);
reportJson.put("Peripheral-Info", jsonDataPeripheralInfo);
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("init('" + reportJson + "');", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
//createWebPrintJob(webView);
mWebView = null;
}
});
} else {
webView.loadUrl("javascript:init('" + reportJson + "')");
createWebPrintJob(webView);
}
if(sessionManager.getMasterVersion().equalsIgnoreCase("v2")) {
webView.loadUrl("file:///android_asset/report_print_new.html");
}else {
webView.loadUrl("file:///android_asset/REPORT.html");
}
// Keep a reference to WebView object until you pass the PrintDocumentAdapter
// to the PrintManager
mWebView = webView;
createWebPrintJob(webView);
} catch (JSONException e) {
e.printStackTrace();
}
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private void createWebPrintJob(WebView mWebView) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
return;
// Get a PrintManager instance
PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
String jobName = getString(R.string.app_name) + " Report";
// Get a print adapter instance
PrintDocumentAdapter printAdapter = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
printAdapter = mWebView.createPrintDocumentAdapter("Report.pdf");
} else {
printAdapter = mWebView.createPrintDocumentAdapter();
}
PrintAttributes attributes = new PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.build();
// Create a print job with name and adapter instance
PrintJob printJob = printManager.print(jobName, printAdapter, attributes);
}