public override void DidFinishNavigation(WKWebView webView, WKNavigation navigation) { try { int padding = 10; UIEdgeInsets pageMargins = new UIEdgeInsets(padding, padding, padding, padding); webView.ViewPrintFormatter.ContentInsets = pageMargins; UIPrintPageRenderer renderer = new UIPrintPageRenderer(); renderer.AddPrintFormatter(webView.ViewPrintFormatter, 0); CGSize pageSize = new CGSize(PDFToHtml.PageWidth, PDFToHtml.PageHeight); CGRect printableRect = new CGRect(padding, padding, pageSize.Width - (padding * 2), pageSize.Height - (padding * 2)); CGRect paperRect = new CGRect(0, 0, PDFToHtml.PageWidth, PDFToHtml.PageHeight); var nSString = new NSString("PaperRect"); var printableRectstring = new NSString("PrintableRect"); renderer.SetValueForKey(NSValue.FromObject(paperRect), nSString); renderer.SetValueForKey(NSValue.FromObject(printableRect), printableRectstring); NSData file = PrintToPDFWithRenderer(renderer, paperRect); File.WriteAllBytes(PDFToHtml.FilePath + ".pdf", file.ToArray()); PDFToHtml.Status = PDFEnum.Completed; } catch { PDFToHtml.Status = PDFEnum.Failed; } }
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()); }
private NSData CreatePdfFile(UIViewPrintFormatter printFormatter) { var renderer = new UIPrintPageRenderer(); renderer.AddPrintFormatter(printFormatter, 0); var point = new CoreGraphics.CGPoint(0, 0); var paperSize = new CoreGraphics.CGSize(this.Frame.Size.Width, this.Frame.Size.Height); var printableRect = new CoreGraphics.CGRect(point, new CoreGraphics.CGSize(paperSize.Width, paperSize.Height)); var paperRect = new CoreGraphics.CGRect(point, new CoreGraphics.CGSize(paperSize.Width, paperSize.Height)); renderer.SetValueForKey(NSValue.FromCGRect(paperRect), new NSString("paperRect")); renderer.SetValueForKey(NSValue.FromCGRect(printableRect), new NSString("printableRect")); return(renderer.PrintToPDF(paperRect)); }
public static NSData PrintToPDF(this UIPrintPageRenderer renderer, CGRect paperRect) { var pdfData = new NSMutableData(); UIGraphics.BeginPDFContext(pdfData, paperRect, null); var range = new NSRange(0, renderer.NumberOfPages); renderer.PrepareForDrawingPages(range); var bounds = UIGraphics.PDFContextBounds; for (int x = 0; x < renderer.NumberOfPages; x++) { UIGraphics.BeginPDFPage(); renderer.DrawPage(x, bounds); } UIGraphics.EndPDFContent(); return(pdfData); }
private NSData PrintToPDFWithRenderer(UIPrintPageRenderer renderer, CGRect paperRect) { NSMutableData pdfData = new NSMutableData(); UIGraphics.BeginPDFContext(pdfData, paperRect, null); renderer.PrepareForDrawingPages(new NSRange(0, renderer.NumberOfPages)); _ = UIGraphics.PDFContextBounds; for (int i = 0; i < renderer.NumberOfPages; i++) { UIGraphics.BeginPDFPage(); renderer.DrawPage(i, paperRect); } UIGraphics.EndPDFContent(); return(pdfData); }
private void _loadFinished(object sender, EventArgs e) { var webview = sender as UIWebView; UIPrintInteractionController controller = UIPrintInteractionController.SharedPrintController; if (null == controller) { return; } // 设置打印机的一些默认信息 UIPrintInfo printInfo = UIPrintInfo.PrintInfo; // 输出类型 printInfo.OutputType = UIPrintInfoOutputType.General; // 打印队列名称 printInfo.JobName = "HtmlDemo"; // 是否单双面打印 printInfo.Duplex = UIPrintInfoDuplex.LongEdge; // 设置默认打印信息 controller.PrintInfo = printInfo; // 显示页码范围 controller.ShowsPageRange = true; // 预览设置 UIPrintPageRenderer myRenderer = new UIPrintPageRenderer(); // To draw the content of each page, a UIViewPrintFormatter is used. // 生成html格式 UIViewPrintFormatter viewFormatter = webview.ViewPrintFormatter; myRenderer.AddPrintFormatter(viewFormatter, 0); // 渲染html controller.PrintPageRenderer = myRenderer; controller.Present(true, (handler, completed, err) => { if (!completed && err != null) { System.Diagnostics.Debug.WriteLine("Printer Error"); } }); }
private NSData PrintToPDFWithRenderer(UIPrintPageRenderer renderer, CGRect paperRect) { NSMutableData pdfData = new NSMutableData(); try { UIGraphics.BeginPDFContext(pdfData, paperRect, null); renderer.PrepareForDrawingPages(new NSRange(0, renderer.NumberOfPages)); for (int i = 0; i < renderer.NumberOfPages; i++) { UIGraphics.BeginPDFPage(); renderer.DrawPage(i, paperRect); } UIGraphics.EndPDFContent(); } catch { PDFToHtml.Status = PDFEnum.Failed; } return(pdfData); }