/// <summary> /// Note: Not stable. /// </summary> /// <param name="webview"></param> private async void CreatePDF1(Android.Webkit.WebView webview) { //var pageCount = await GetPDFPageCount(webview); PdfDocument document = new PdfDocument(); PdfDocument.Page page = document.StartPage(new PdfDocument.PageInfo.Builder(2120, 3000, 1).Create()); await Task.Delay(34); webview.Draw(page.Canvas); document.FinishPage(page); Stream filestream = null; FileOutputStream fos = null; try { filestream = new MemoryStream(); fos = new Java.IO.FileOutputStream(fileNameWithPath, false); document.WriteTo(filestream); fos.Write(((MemoryStream)filestream).ToArray(), 0, (int)filestream.Length); } catch (Java.Lang.Exception e) { System.Console.WriteLine(e.Message); } finally { filestream?.Close(); fos?.Close(); } document.Close(); OnPageLoadFinished?.Invoke(this, new EventArgs()); }
public override void LoadingFinished(UIWebView webView) { double height, width; int header, sidespace; width = 595.2; height = 841.8; header = 10; sidespace = 10; UIEdgeInsets pageMargins = new UIEdgeInsets(header, sidespace, header, sidespace); webView.ViewPrintFormatter.ContentInsets = pageMargins; UIPrintPageRenderer renderer = new UIPrintPageRenderer(); renderer.AddPrintFormatter(webView.ViewPrintFormatter, 0); CGSize pageSize = new CGSize(width, height); CGRect printableRect = new CGRect(sidespace, header, pageSize.Width - (sidespace * 2), pageSize.Height - (header * 2)); CGRect paperRect = new CGRect(0, 0, width, height); renderer.SetValueForKey(NSValue.FromObject(paperRect), (NSString)"paperRect"); renderer.SetValueForKey(NSValue.FromObject(printableRect), (NSString)"printableRect"); NSData file = PrintToPDFWithRenderer(renderer, paperRect); File.WriteAllBytes(filename, file.ToArray()); OnPageLoadFinished?.Invoke(this, new EventArgs()); }
public Java.Lang.Object Invoke(Java.Lang.Object proxy, Method method, Java.Lang.Object[] args) { if (method.Name.Equals("onLayoutFinished")) { // 监听到内部调用了onLayoutFinished()方法,即打印成功 onLayoutSuccess(); } else if (method.Name.Equals("onWriteFinished")) { OnPageLoadFinished?.Invoke(this, new EventArgs()); } else { // 监听到打印失败或者取消了打印 } return(null); }