コード例 #1
0
ファイル: HtmlFileContent.cs プロジェクト: tig/winprint
        /// <summary>
        /// Get total count of pages. Set any local page-size related values (e.g. linesPerPage)
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public override async Task <int> RenderAsync(System.Drawing.Printing.PrinterResolution printerResolution)
        {
            Helpers.Logging.TraceMessage("HtmlFileContent.RenderAsync()");

            await base.RenderAsync(printerResolution);

            int width  = (int)PageSize.Width;  // (printerResolution.X * PageSize.Width / 100);
            int height = (int)PageSize.Height; // (printerResolution.Y * PageSize.Height / 100);

            Helpers.Logging.TraceMessage($"HtmlFileContent.RenderAsync - Page size: {width}x{height} @ {printerResolution.X}x{printerResolution.Y} dpi");

            string css;

            try {
                // TODO: Make sure wiprint.css is in the same dir as .config file once setup is impl
                using StreamReader cssStream = new StreamReader("winprint.css");
                css = await cssStream.ReadToEndAsync();

                cssStream.Close();
            }
            catch {
                css = IncludedWinPrintCss.CssString;
            }

            var resources = new HtmlResources(filePath);

            litehtml            = new GDIPlusContainer(css, resources.GetResourceString, resources.GetResourceBytes);
            litehtml.Size       = new LiteHtmlSize(width, 0);
            litehtml.PageHeight = height;

            htmlBitmap = new Bitmap(width, height);
            //htmlBitmap.SetResolution(printerResolution.X, printerResolution.Y);
            var g = Graphics.FromImage(htmlBitmap);

            g.PageUnit = GraphicsUnit.Display;
            //g.FillRectangle(Brushes.LightYellow, new Rectangle(0, 0, width, height));
            Helpers.Logging.TraceMessage($"HtmlFileContent.RenderAsync() Graphic is {htmlBitmap.Width}x{htmlBitmap.Height} @ {g.DpiX}x{g.DpiY} dpi. PageUnit = {g.PageUnit.ToString()}");
            litehtml.Graphics = g;
            Helpers.Logging.TraceMessage($"PageUnit = {g.PageUnit.ToString()}");
            litehtml.Document.CreateFromString(document);
            litehtml.Document.OnMediaChanged();


            // TODO: Use return of Render() to get "best width"
            int bestWidth = litehtml.Document.Render((int)width);

            //litehtml.SetViewport(new LiteHtmlPoint(0, 0), new LiteHtmlSize(width, height));
            //litehtml.Draw();
            litehtml.Graphics = null;

            Helpers.Logging.TraceMessage($"Litehtml_DocumentSizeKnown {litehtml.Document.Width()}x{litehtml.Document.Height()} bestWidth = {bestWidth}");

            var n = (int)(litehtml.Document.Height() / height) + 1;

            Helpers.Logging.TraceMessage($"HtmlFileContent.RenderAsync - {n} pages.");

            return(n);
        }
コード例 #2
0
 public static HtmlResourcesContext CreateResourcesContext(this HttpContextBase httpContext, string contextKey, HtmlResources resources = null)
 {
     return(Helper.CreateResourcesContext(httpContext, contextKey, resources));
 }
コード例 #3
0
        public static HtmlResourcesContext CreateResourcesContext(this HtmlHelper htmlHelper, string contextKey, HtmlResources resources = null)
        {
            Assert.ArgumentNotNull(htmlHelper, "htmlHelper");

            return(Helper.CreateResourcesContext(htmlHelper.ViewContext.HttpContext, contextKey, resources));
        }
コード例 #4
0
 public GetDefaultResourcesArgs()
 {
     this.Head        = new HtmlResources();
     this.Body        = new HtmlResources();
     this.AllPageBody = new HtmlResources();
 }
コード例 #5
0
ファイル: HtmlCte.cs プロジェクト: tig/winprint
        /// <summary>
        /// Get total count of pages. Set any local page-size related values (e.g. linesPerPage)
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public override async Task <int> RenderAsync(System.Drawing.Printing.PrinterResolution printerResolution, EventHandler <string> reflowProgress)
        {
            LogService.TraceMessage();

            _ready = false;

            reflowProgress?.Invoke(this, "HtmlFileContent.RenderAsync");
            await base.RenderAsync(printerResolution, reflowProgress).ConfigureAwait(false);

            var width  = (int)PageSize.Width;  // (printerResolution.X * PageSize.Width / 100);
            var height = (int)PageSize.Height; // (printerResolution.Y * PageSize.Height / 100);

            LogService.TraceMessage($"HtmlFileContent.RenderAsync - Page size: {width}x{height} @ {printerResolution.X}x{printerResolution.Y} dpi");

            string css;

            try {
                // TODO: Make sure winprint.css is in the same dir as .config file once setup is impl
                using var cssStream = new StreamReader("winprint.css");
                css = await cssStream.ReadToEndAsync();

                cssStream.Close();
                reflowProgress?.Invoke(this, "Read winprint.css");
            }
            catch {
                css = IncludedWinPrintCss.CssString;
            }

            // BUGBUG: wihtout knowing the relative root path fo the html document we can't load any resources
            var resources = new HtmlResources("");

            _litehtml = new GDIPlusContainer(css, resources.GetResourceString, resources.GetResourceBytes)
            {
                Diagnostics = ContentSettings.Diagnostics,
                Size        = new LiteHtmlSize(width, 0),
                PageHeight  = height
            };

            _htmlBitmap = new Bitmap(width, height);
            //htmlBitmap.SetResolution(printerResolution.X, printerResolution.Y);
            var g = Graphics.FromImage(_htmlBitmap);

            g.PageUnit          = GraphicsUnit.Display;
            g.TextRenderingHint = ContentTypeEngineBase.TextRenderingHint;

            //g.FillRectangle(Brushes.LightYellow, new Rectangle(0, 0, width, height));

            LogService.TraceMessage($"HtmlFileContent.RenderAsync() Graphic is {_htmlBitmap.Width} x {_htmlBitmap.Height} @ {g.DpiX} x {g.DpiY} dpi. PageUnit = {g.PageUnit.ToString()}");
            _litehtml.Graphics        = g;
            _litehtml.StringFormat    = ContentTypeEngineBase.StringFormat;
            _litehtml.Grayscale       = ContentSettings.Grayscale;
            _litehtml.Darkness        = ContentSettings.Darkness;
            _litehtml.PrintBackground = ContentSettings.PrintBackground;

            //Logging.TraceMessage("litehtml.Document.CreateFromString(document)");
            reflowProgress?.Invoke(this, "litehtml.Document.CreateFromString(document)");
            _litehtml.Document.CreateFromString(Document);
            //Logging.TraceMessage("back from litehtml.Document.CreateFromString(document)");
            reflowProgress?.Invoke(this, "back from litehtml.Document.CreateFromString(document)");

            _litehtml.Document.OnMediaChanged();

            // TODO: Use return of Render() to get "best width"
            var bestWidth = _litehtml.Document.Render(width);

            reflowProgress?.Invoke(this, "Done with Render");
            // Note, setting viewport does nothing
            //litehtml.SetViewport(new LiteHtmlPoint(0, 0), new LiteHtmlSize(width, height));
            _litehtml.Graphics = null;

            //Logging.TraceMessage($"Litehtml_DocumentSizeKnown {_litehtml.Document.Width()}x{_litehtml.Document.Height()} bestWidth = {bestWidth}");

            var n = _litehtml.Document.Height() / height + 1;

            Logging.TraceMessage($"HtmlFileContent.RenderAsync - {n} pages.");
            _ready = true;
            return(n);
        }
コード例 #6
0
 public virtual HtmlResourcesContext CreateResourcesContext(HttpContextBase httpContext, string contextKey, HtmlResources resources = null)
 {
     return(new HtmlResourcesContext(httpContext, contextKey, resources));
 }