コード例 #1
0
ファイル: HtmlCte.cs プロジェクト: tig/winprint
        /// <summary>
        /// Gets next page from stream. Returns false if no more pages
        /// </summary>
        /// <param name="streamToPrint"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        // TODO: Deal with PageFeeds
        // TODO: Support different forms of linewrap (truncate/clip, word, line)
        // TODO: Support custom line wrap symbol
        //private bool NextPage(StreamReader streamToPrint, out Page page) {
        //    page = new Page(containingSheet);

        //    // define context used for determining glyph metrics.
        //    using Bitmap bitmap = new Bitmap(1, 1);
        //    Graphics g = Graphics.FromImage(bitmap);
        //    //g = Graphics.FromHwnd(PrintPreview.Instance.Handle);
        //    g.PageUnit = GraphicsUnit.Document;


        //    SizeF size = HtmlRender.MeasureGdiPlus(g, html, containingSheet.GetPageWidth());

        //    return false;
        //}

        /// <summary>
        /// Paints a single page
        /// </summary>
        /// <param name="g">Graphics with 0,0 being the origin of the Page</param>
        /// <param name="pageNum">Page number to print</param>
        public override void PaintPage(Graphics g, int pageNum)
        {
            //if (pageNum > NumPages) {
            //    Logging.TraceMessage($"HtmlFileContent.PaintPage({pageNum}) when NumPages is {NumPages}");
            //    return;
            //}
            if (_litehtml == null || _ready == false)
            {
                //Log.Debug($"HtmlFileContent.PaintPage({pageNum}) when litehtml is not ready.");
                return;
            }
            SizeF pagesizeInPixels;
            var   state = g.Save();

            if (g.PageUnit == GraphicsUnit.Display)
            {
                // Print
                pagesizeInPixels = new SizeF(PageSize.Width, PageSize.Height);
            }
            else
            {
                // Preview
                pagesizeInPixels = new SizeF(PageSize.Width / 100 * g.DpiX, PageSize.Height / 100 * g.DpiY);
                g.PageUnit       = GraphicsUnit.Display;
            }


            //if (litehtml.Graphics == null) {
            //    Logging.TraceMessage($"new print job. Rendering again");
            //    // This is a new print job. Re-render with new DPI
            //    litehtml.Graphics = g;
            //    litehtml.SetViewport(new LiteHtmlPoint(0, 0), new LiteHtmlSize(PageSize.Width, PageSize.Height));
            //    int bestWidth = litehtml.Document.Render((int)PageSize.Width);
            //}

            LogService.TraceMessage($"HtmlFileContent.PaintPage({pageNum} - {g.DpiX}x{g.DpiY} dpi. PageUnit = {g.PageUnit.ToString()})");

            _litehtml.Graphics  = g;
            g.TextRenderingHint = ContentTypeEngineBase.TextRenderingHint;

            var yPos = (pageNum - 1) * (int)Math.Round(PageSize.Height);

            if (!ContentSettings.Diagnostics)
            {
                g.SetClip(new Rectangle(0, 0, (int)Math.Round(PageSize.Width), (int)Math.Round(PageSize.Height)));
            }

            var size = new LiteHtmlSize(Math.Round(PageSize.Width), Math.Round(PageSize.Height));

            _litehtml.Document.Draw(-0, -yPos, new position {
                x      = 0,
                y      = 0,
                width  = (int)size.Width,
                height = (int)size.Height
            });
            _litehtml.Graphics = null;

            //litehtml.SetViewport(new LiteHtmlPoint(0, yPos), new LiteHtmlSize(Math.Round(PageSize.Width), Math.Round(PageSize.Height)));
            //litehtml.ScrollOffset = new LiteHtmlPoint(0, yP
            // os);
            //litehtml.Draw();

            //g.DrawImage(htmlBitmap, 0, 0);
            //g.DrawRectangle(Pens.Red, new Rectangle(0, 0, (int)Math.Round(PageSize.Width), (int)Math.Round(PageSize.Height)));

            g.Restore(state);
        }
コード例 #2
0
 public static CGSize ToCGSize(this LiteHtmlSize viewportSize)
 {
     return(new CGSize(viewportSize.Width, viewportSize.Height));
 }
コード例 #3
0
 private void Container_DocumentSizeKnown(LiteHtmlSize size)
 {
     Width  = size.Width;
     Height = size.Height;
     SetViewport();
 }
コード例 #4
0
 void LiteHtmlView_DocumentSizeKnown(LiteHtmlSize size)
 {
     LiteHtmlView.SetFrameSize(new CGSize(scrollView.ContentView.Bounds.Width, size.Height));
     LiteHtmlView.SetViewport(new CGRect(scrollView.ContentView.Bounds.Location, scrollView.ContentView.Frame.Size));
 }