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 void PrintDocument(string filePath) { var attr = new PrintAttributes.Builder() .SetColorMode(PrintColorMode.Color) .SetMediaSize(PrintAttributes.MediaSize.IsoA4) .SetDuplexMode(DuplexMode.LongEdge) .Build(); var jobName = Android.App.Application.Context.PackageName + ".PrintDocument"; var job = PrintManager.Print(jobName, new PrintAdapter(filePath), attr); PrintManager.PrintJobs.Add(job); }
public override void OnPageFinished(WebView view, string url) { base.OnPageFinished(view, url); string jobName = "Document"; PrintAttributes attributes = new PrintAttributes.Builder() .SetMediaSize(PrintAttributes.MediaSize.IsoA4) .SetResolution(new PrintAttributes.Resolution("pdf", "pdf", 600, 600)) .SetMinMargins(PrintAttributes.Margins.NoMargins).Build(); PdfPrint pdfPrint = new PdfPrint(attributes); pdfPrint.Print(view.CreatePrintDocumentAdapter(jobName)); }
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); } }
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); } }
public void GeneratePdfFile(string text) { PrintAttributes printAttrs = new PrintAttributes.Builder() .SetColorMode(PrintColorMode.Color) .SetMediaSize(PrintAttributes.MediaSize.IsoA4) .SetResolution(new PrintAttributes.Resolution("guardianHealthId", "TestReport", 592, 842)) .SetMinMargins(PrintAttributes.Margins.NoMargins) .Build(); // Create a document PdfDocument document = new PrintedPdfDocument(Android.App.Application.Context, printAttrs); // Create a page description // A4 : Page size // pageWidth The page width in PostScript (1/72th of an inch) // pageHeight The page height in PostScript(1 / 72th of an inch). PageInfo pageInfo = new PageInfo.Builder(592, 842, 1).Create(); PdfDocument.Page page = document.StartPage(pageInfo); Xamarin.Forms.Button btn = new Xamarin.Forms.Button(); // File to create page File path = GetDirectoryPath(); System.IO.FileStream fileStream = new System.IO.FileStream(path.ToString(), System.IO.FileMode.Create); Canvas canvas = page.Canvas; Paint paint = new Paint(); canvas.DrawText("This is a demo pdf file.\n" + text, 10, 10, paint); document.FinishPage(page); document.WriteTo(fileStream); document.Close(); fileStream.Close(); }
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; } }