public PdfResult(IPdfConverter converter, PdfConvertSettings settings)
		{
			Guard.ArgumentNotNull(() => converter);
			
			this.Converter = converter;
			this.Settings = settings ?? new PdfConvertSettings();
		}
Example #2
0
        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);
            }
        }
Example #4
0
        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 };
        }
Example #7
0
        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;
        }