/// <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); }
public static CGSize ToCGSize(this LiteHtmlSize viewportSize) { return(new CGSize(viewportSize.Width, viewportSize.Height)); }
private void Container_DocumentSizeKnown(LiteHtmlSize size) { Width = size.Width; Height = size.Height; SetViewport(); }
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)); }