public PdfResult(IPdfConverter converter, PdfConvertSettings settings) { Guard.ArgumentNotNull(() => converter); this.Converter = converter; this.Settings = settings ?? new PdfConvertSettings(); }
public byte[] Convert(PdfConvertSettings settings) { Guard.NotNull(settings, nameof(settings)); if (settings.Page == null) { throw Error.InvalidOperation("The 'Page' property of the 'settings' argument cannot be null."); } try { var converter = CreateWkConverter(settings); var input = settings.Page.Process("page"); if (settings.Page.Kind == PdfContentKind.Url) { Logger.DebugFormat("Generating PDF from URL '{0}'. CustomWkHtmlPageArgs: {1}", input, converter.CustomWkHtmlPageArgs); return(converter.GeneratePdfFromFile(input, null)); } else { Logger.DebugFormat("Generating PDF from HTML. CustomWkHtmlPageArgs: {0}", converter.CustomWkHtmlPageArgs); return(converter.GeneratePdf(input, null)); } } catch (Exception ex) { Logger.Error(ex, "Html to Pdf conversion error"); throw; } finally { TeardownContent(settings.Cover); TeardownContent(settings.Footer); TeardownContent(settings.Header); TeardownContent(settings.Page); } }
public byte[] Convert(PdfConvertSettings settings) { Guard.ArgumentNotNull(() => settings); if (settings.Page == null) { throw Error.InvalidOperation("The 'Page' property of the 'settings' argument cannot be null."); } try { var converter = CreateWkConverter(settings); var input = settings.Page.Process("page"); if (settings.Page.Kind == PdfContentKind.Url) { return converter.GeneratePdfFromFile(input, null); } else { return converter.GeneratePdf(input, null); } } catch (Exception ex) { Logger.Error("Html to Pdf conversion error", ex); throw; } finally { TeardownContent(settings.Cover); TeardownContent(settings.Footer); TeardownContent(settings.Header); TeardownContent(settings.Page); } }
public byte[] Convert(PdfConvertSettings settings) { Guard.ArgumentNotNull(() => settings); if (settings.Page == null) { throw Error.InvalidOperation("The 'Page' property of the 'settings' argument cannot be null."); } try { var converter = CreateWkConverter(settings); var input = settings.Page.Process("page"); if (settings.Page.Kind == PdfContentKind.Url) { return(converter.GeneratePdfFromFile(input, null)); } else { return(converter.GeneratePdf(input, null)); } } catch (Exception ex) { Logger.Error("Html to Pdf conversion error", ex); throw; } finally { TeardownContent(settings.Cover); TeardownContent(settings.Footer); TeardownContent(settings.Header); TeardownContent(settings.Page); } }
private ActionResult PrintCore(List<OrderDetailsModel> model, bool pdf, string pdfFileName) { ViewBag.PdfMode = pdf; var viewName = "Details.Print"; if (pdf) { // TODO: (mc) this is bad for multi-document processing, where orders can originate from different stores. var storeId = model[0].StoreId; var routeValues = new RouteValueDictionary { { "storeId", storeId } }; var pdfSettings = _services.Settings.LoadSetting<PdfSettings>(storeId); var settings = new PdfConvertSettings { Size = pdfSettings.LetterPageSizeEnabled ? PdfPageSize.Letter : PdfPageSize.A4, Margins = new PdfPageMargins { Top = 35, Bottom = 35 }, Page = new PdfViewContent(viewName, model, this.ControllerContext), Header = new PdfRouteContent("PdfReceiptHeader", "Common", routeValues, this.ControllerContext), Footer = new PdfRouteContent("PdfReceiptFooter", "Common", routeValues, this.ControllerContext) }; return new PdfResult(_pdfConverter, settings) { FileName = pdfFileName }; } return View(viewName, model); }
public ActionResult PdfPackagingSlips(bool all, string selectedIds = null) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); if (!all && selectedIds.IsEmpty()) { NotifyInfo(_localizationService.GetResource("Admin.Common.ExportNoData")); return RedirectToReferrer(); } IList<Shipment> shipments; using (var scope = new DbContextScope(_services.DbContext, autoDetectChanges: false, forceNoTracking: true)) { if (all) { shipments = _shipmentService.GetAllShipments(null, null, null, 0, int.MaxValue); } else { var ids = selectedIds.ToIntArray(); shipments = _shipmentService.GetShipmentsByIds(ids); } } if (shipments.Count == 0) { NotifyInfo(_localizationService.GetResource("Admin.Common.ExportNoData")); return RedirectToReferrer(); } if (shipments.Count > 500) { NotifyWarning(_localizationService.GetResource("Admin.Common.ExportToPdf.TooManyItems")); return RedirectToReferrer(); } string pdfFileName = "PackagingSlips.pdf"; if (shipments.Count == 1) { pdfFileName = "PackagingSlip-{0}.pdf".FormatInvariant(shipments[0].Id); } var model = shipments.Select(x => PrepareShipmentModel(x, true, true)).ToList(); // TODO: (mc) this is bad for multi-document processing, where orders can originate from different stores. var storeId = model[0].StoreId; var routeValues = new RouteValueDictionary(new { storeId = storeId, area = "" }); var pdfSettings = _services.Settings.LoadSetting<PdfSettings>(storeId); var settings = new PdfConvertSettings { Size = pdfSettings.LetterPageSizeEnabled ? PdfPageSize.Letter : PdfPageSize.A4, Margins = new PdfPageMargins { Top = 35, Bottom = 35 }, Page = new PdfViewContent("ShipmentDetails.Print", model, this.ControllerContext), Header = new PdfRouteContent("PdfReceiptHeader", "Common", routeValues, this.ControllerContext), Footer = new PdfRouteContent("PdfReceiptFooter", "Common", routeValues, this.ControllerContext) }; return new PdfResult(_pdfConverter, settings) { FileName = pdfFileName }; }
internal HtmlToPdfConverter CreateWkConverter(PdfConvertSettings settings) { // Global options var converter = new HtmlToPdfConverter { Grayscale = settings.Grayscale, LowQuality = settings.LowQuality, Orientation = (PageOrientation)(int)settings.Orientation, PageHeight = settings.PageHeight, PageWidth = settings.PageWidth, Size = (PageSize)(int)settings.Size, PdfToolPath = FileSystemHelper.TempDir("wkhtmltopdf") }; if (settings.Margins != null) { converter.Margins.Bottom = settings.Margins.Bottom; converter.Margins.Left = settings.Margins.Left; converter.Margins.Right = settings.Margins.Right; converter.Margins.Top = settings.Margins.Top; } var sb = new StringBuilder(settings.CustomFlags); // doc title if (settings.Title.HasValue()) { sb.AppendFormat(CultureInfo.CurrentCulture, " --title \"{0}\"", settings.Title); } // Cover content & options if (settings.Cover != null) { var path = settings.Cover.Process("cover"); if (path.HasValue()) { sb.AppendFormat(" cover \"{0}\" ", path); settings.Cover.WriteArguments("cover", sb); if (settings.CoverOptions != null) { settings.CoverOptions.Process("cover", sb); } } } // Toc options if (settings.TocOptions != null && settings.TocOptions.Enabled) { settings.TocOptions.Process("toc", sb); } // apply cover & toc converter.CustomWkHtmlArgs = sb.ToString().Trim().NullEmpty(); sb.Clear(); // Page options if (settings.PageOptions != null) { settings.PageOptions.Process("page", sb); } // Header content & options if (settings.Header != null) { var path = settings.Header.Process("header"); if (path.HasValue()) { sb.AppendFormat(" --header-html \"{0}\"", path); settings.Header.WriteArguments("header", sb); } } if (settings.HeaderOptions != null && (settings.Header != null || settings.HeaderOptions.HasText)) { settings.HeaderOptions.Process("header", sb); } // Footer content & options if (settings.Footer != null) { var path = settings.Footer.Process("footer"); if (path.HasValue()) { sb.AppendFormat(" --footer-html \"{0}\"", path); settings.Footer.WriteArguments("footer", sb); } } if (settings.FooterOptions != null && (settings.Footer != null || settings.FooterOptions.HasText)) { settings.FooterOptions.Process("footer", sb); } // apply settings converter.CustomWkHtmlPageArgs = sb.ToString().Trim().NullEmpty(); return(converter); }
internal HtmlToPdfConverter CreateWkConverter(PdfConvertSettings settings) { // Global options var converter = new HtmlToPdfConverter { Grayscale = settings.Grayscale, LowQuality = settings.LowQuality, Orientation = (PageOrientation)(int)settings.Orientation, PageHeight = settings.PageHeight, PageWidth = settings.PageWidth, Size = (PageSize)(int)settings.Size, }; if (settings.Margins != null) { converter.Margins.Bottom = settings.Margins.Bottom; converter.Margins.Left = settings.Margins.Left; converter.Margins.Right = settings.Margins.Right; converter.Margins.Top = settings.Margins.Top; } var sb = new StringBuilder(settings.CustomFlags); // doc title if (settings.Title.HasValue()) { sb.AppendFormat(CultureInfo.CurrentCulture, " --title \"{0}\"", settings.Title); } // Cover content & options if (settings.Cover != null) { var path = settings.Cover.Process("cover"); if (path.HasValue()) { sb.AppendFormat(" cover \"{0}\" ", path); settings.Cover.WriteArguments("cover", sb); if (settings.CoverOptions != null) { settings.CoverOptions.Process("cover", sb); } } } // Toc options if (settings.TocOptions != null && settings.TocOptions.Enabled) { settings.TocOptions.Process("toc", sb); } // apply cover & toc converter.CustomWkHtmlArgs = sb.ToString().Trim().NullEmpty(); sb.Clear(); // Page options if (settings.PageOptions != null) { settings.PageOptions.Process("page", sb); } // Header content & options if (settings.Header != null) { var path = settings.Header.Process("header"); if (path.HasValue()) { sb.AppendFormat(" --header-html \"{0}\"", path); settings.Header.WriteArguments("header", sb); } } if (settings.HeaderOptions != null && (settings.Header != null || settings.HeaderOptions.HasText)) { settings.HeaderOptions.Process("header", sb); } // Footer content & options if (settings.Footer != null) { var path = settings.Footer.Process("footer"); if (path.HasValue()) { sb.AppendFormat(" --footer-html \"{0}\"", path); settings.Footer.WriteArguments("footer", sb); } } if (settings.FooterOptions != null && (settings.Footer != null || settings.FooterOptions.HasText)) { settings.FooterOptions.Process("footer", sb); } // apply settings converter.CustomWkHtmlPageArgs = sb.ToString().Trim().NullEmpty(); return converter; }