Search code examples
c#htmlabcpdfabcpdf9

HtmlOption.Engine with type EngineType.Gecko generate only first page


I want to export html to pdf, document is generated but only first page

    Doc theDoc = new Doc();
    theDoc.HtmlOptions.UseScript = true;
    theDoc.HtmlOptions.Media = MediaType.Print;
    theDoc.HtmlOptions.InitialWidth = 1048;
    theDoc.HtmlOptions.ImageQuality = 101;
    theDoc.HtmlOptions.UseScript = true;
    theDoc.HtmlOptions.OnLoadScript = "(function(){ window.ABCpdf_go = false; setTimeout(function(){ window.ABCpdf_go = true; }, 55000); })();";
    theDoc.HtmlOptions.Engine = EngineType.Gecko;
    theDoc.HtmlOptions.PageLoadMethod =  PageLoadMethodType.WebBrowserNavigate;
    theDoc.HtmlOptions.ForMSHtml.UseScript = true;

     int theID = theDoc.AddImageHtml(htmlContent);

     while (true)
    {
        theDoc.FrameRect();
        if (!theDoc.Chainable(theID))
            break;
        theDoc.Page = theDoc.AddPage();
        theID = theDoc.AddImageToChain(theID);
    }
    for (int i = 1; i <= theDoc.PageCount; i++)
    {
        theDoc.PageNumber = i;
        theDoc.Flatten();
    }

    theDoc.Save(HttpContext.Current.Server.MapPath("htmlimport.pdf"));
    theDoc.Clear();

how I can to add all pages with Gecko? if I use MSHtml style from the page is not look good


Solution

  • To use the Gekoengine, add

      theDoc.HtmlOptions.Engine = EngineType.Gecko;
    

    to the document settings at the top.

    You need to page the document as you add the HTML, just wrap what you have in a loop, I have set a upper limit to 50 pages, but if the document is large just up the loop.

     int theID = theDoc.AddImageUrl(htmlContent);
     //Add up to 50 pages
     for (int i = 1; i <= 50; i++)
     {
       if (!theDoc.Chainable(theID))
       break;
       theDoc.Page = theDoc.AddPage();
       theID = theDoc.AddImageToChain(theID);
     }