async Task OnPageFinished(Android.Webkit.WebView webView, string fileName, PageSize pageSize, PageMargin margin, TaskCompletionSource <ToFileResult> taskCompletionSource) { if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat) { await Task.Delay(5); var builder = new PrintAttributes.Builder(); //builder.SetMediaSize(PrintAttributes.MediaSize.NaLetter); builder.SetMediaSize(new PrintAttributes.MediaSize(pageSize.Name, pageSize.Name, (int)(pageSize.Width * 1000 / 72), (int)(pageSize.Height * 1000 / 72))); builder.SetResolution(new PrintAttributes.Resolution("pdf", "pdf", 72, 72)); if (margin is null) { builder.SetMinMargins(PrintAttributes.Margins.NoMargins); } else { builder.SetMinMargins(new PrintAttributes.Margins((int)(margin.Left * 1000 / 72), (int)(margin.Top * 1000 / 72), (int)(margin.Right * 1000 / 72), (int)(margin.Bottom * 1000 / 72))); } var attributes = builder.Build(); var adapter = webView.CreatePrintDocumentAdapter(Guid.NewGuid().ToString()); var layoutResultCallback = new PdfLayoutResultCallback(); layoutResultCallback.Adapter = adapter; layoutResultCallback.TaskCompletionSource = taskCompletionSource; layoutResultCallback.FileName = fileName; adapter.OnLayout(null, attributes, null, layoutResultCallback, null); } }
public override void OnPageFinished(Android.Webkit.WebView webView, string url) { base.OnPageFinished(webView, url); var printManager = (PrintManager)webView.Context.GetSystemService(Context.PrintService); string jobName = webView.Context.PackageName + ".PrintHtml"; PrintDocumentAdapter printAdapter = webView.CreatePrintDocumentAdapter(jobName); Android.Print.PrintJob printJob = printManager.Print(jobName, printAdapter, new PrintAttributes.Builder().Build()); printManager.PrintJobs.Add(printJob); }
private async void CreatePDF2(Android.Webkit.WebView webview) { try { // 计算webview打印需要的页数 int numberOfPages = await GetPDFPageCount(webview); File pdfFile = new File(fileNameWithPath); if (pdfFile.Exists()) { pdfFile.Delete(); } pdfFile.CreateNewFile(); descriptor = ParcelFileDescriptor.Open(pdfFile, ParcelFileMode.ReadWrite); // 设置打印参数 var dm = webview.Context.Resources.DisplayMetrics; var d = dm.Density; var dpi = dm.DensityDpi; var height = dm.HeightPixels; var width = dm.WidthPixels; var xdpi = dm.Xdpi; var ydpi = dm.Ydpi; PrintAttributes attributes = new PrintAttributes.Builder() .SetMediaSize(MediaSize) .SetResolution(new PrintAttributes.Resolution("id", Context.PrintService, Convert.ToInt16(xdpi), Convert.ToInt16(ydpi))) .SetColorMode(PrintColorMode.Color) .SetMinMargins(PrintAttributes.Margins.NoMargins) .Build(); ranges = new PageRange[] { new PageRange(0, numberOfPages - 1) }; // 创建pdf文件缓存目录 // 获取需要打印的webview适配器 printAdapter = webview.CreatePrintDocumentAdapter("CreatePDF"); // 开始打印 printAdapter.OnStart(); printAdapter.OnLayout(attributes, attributes, new CancellationSignal(), GetLayoutResultCallback(this), new Bundle()); } catch (Java.IO.FileNotFoundException e) { System.Console.WriteLine(e.Message); } catch (Java.IO.IOException e) { System.Console.WriteLine(e.Message); } catch (Java.Lang.Exception e) { System.Console.WriteLine(e.Message); } }
protected void OnElementChanged(Android.Webkit.WebView webView) { try { Device.BeginInvokeOnMainThread(() => { var printManager = (PrintManager)Forms.Context.GetSystemService(Context.PrintService); PrintDocumentAdapter printAdapter = webView.CreatePrintDocumentAdapter("IDCARD"); PrintJob printJob = printManager.Print("IDCARD", printAdapter, new PrintAttributes.Builder().Build()); // Save the job object for later status checking mPrintJobs.Add(printJob); }); } catch (Exception) { throw; } }
async Task OnPageFinished(Android.Webkit.WebView webView, string fileName, TaskCompletionSource <ToFileResult> taskCompletionSource) { if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat) { var builder = new PrintAttributes.Builder(); builder.SetMediaSize(PrintAttributes.MediaSize.NaLetter); builder.SetResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600)); builder.SetMinMargins(PrintAttributes.Margins.NoMargins); var attributes = builder.Build(); var adapter = webView.CreatePrintDocumentAdapter(Guid.NewGuid().ToString()); var layoutResultCallback = new PdfLayoutResultCallback(); layoutResultCallback.Adapter = adapter; layoutResultCallback.TaskCompletionSource = taskCompletionSource; layoutResultCallback.FileName = fileName; adapter.OnLayout(null, attributes, null, layoutResultCallback, null); } }
internal void OnPageLoaded(Android.Webkit.WebView webView) { try { if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat) { var builder = new PrintAttributes.Builder(); builder.SetMediaSize(PrintAttributes.MediaSize.IsoA4); builder.SetResolution(new PrintAttributes.Resolution("pdf", "pdf", (int)pDFToHtml.PageDPI, (int)pDFToHtml.PageDPI)); builder.SetMinMargins(PrintAttributes.Margins.NoMargins); var attributes = builder.Build(); var adapter = webView.CreatePrintDocumentAdapter(pDFToHtml.FileName); var layoutResultCallback = new PdfLayoutResultCallback(); layoutResultCallback.Adapter = adapter; layoutResultCallback.PDFToHtml = pDFToHtml; adapter.OnLayout(null, attributes, null, layoutResultCallback, null); } } catch { pDFToHtml.Status = PDFEnum.Failed; } }