Html在不使用WebBrowser的情况下渲染到图像(C#/Net)

本文关键字:图像 Net WebBrowser 情况下 Html | 更新日期: 2023-09-27 18:26:52

我在数据库中存储了html字符串/文档(如果您在IE浏览器中查看任何网页的源代码,则生成html代码),我需要使用C#/.Net wcf服务将此html转换为图像。当前的代码使用的是WebBrowser,它运行得很好,只是速度很慢,偶尔会遇到问题。

我想在不使用WebBrowser的情况下替换此功能(html转换为.png图像)。我尝试使用TheArtofdev.HtmlRenderer,它似乎可以解决大多数问题,但当它遇到像下面这样的html(包含多个"div>"可能是?)时,它似乎会遇到问题,并且它不能正确生成图像。它只为这个html生成一个部分图像。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><style>p { padding: 0px; border: 0px ; margin: 0px;}ul { padding: 0px; border: 0px; margin: 0px;}</style><title>Item 18626</title></head><body><table border="0" width="700"><tr><td><strong><font face="verdana,geneva">Item 18626</font></strong><br></br></td></tr><tr><td><font face="verdana,geneva"><p style="font-weight:normal; font-weight:normal; ">Use the following passages to answer the question. </p><p style="font-weight:normal; ">&#xA0;</p><div align="center"><p><b>Mariana's Thesis Statement</b></p></div><div align="center"><table><colgroup style="width:46.6206em; " /><tbody><tr><td style="padding:0.2292em;  border:0.0834em solid #000000; "><p style="">The Cold War policy of containment was a success.</p></td></tr></tbody></table></div><p>&#xA0;</p><div align="center"><p><b>Information on the Vietnam War</b></p></div><div align="center"><table><colgroup style="width:46.6206em; " /><tbody><tr><td style="padding:0.2292em;  border:0.0834em solid #000000; "><p style="">The United States sent advisors to South Vietnam in 1954 to help the government fight communist guerrillas who wanted to reunite with communist North Vietnam. By 1964, the United States began sending combat troops. The U.S. military used extensive bombing and advanced technology; however, they were unable to turn the tide against communism. In 1973, the United States withdrew from South Vietnam, and in 1975, the government of South Vietnam fell to the communists and the country was reunited.</p></td></tr></tbody></table></div><p>&#xA0;</p><p>Mariana is writing a paper about the Cold War and discovers the information above on the Vietnam War. </p><p style="font-weight:normal; ">&#xA0;</p><p style="font-weight:normal; ">Describe one way the passage above refutes Mariana's thesis.</p><p style="font-weight:normal; ">&#xA0;</p><p style="font-weight:normal; ">Type your answer in the space provided.</p></font></td></tr><tr><td>&nbsp;</td></tr><tr><td><div id="001" style="border:solid black 1px;width:700px;overflow-x:hidden;overflow-y:visible;text-align:left;word-wrap:break-word"><p>it refutes because it dosent talk about the cold war it only talks about the vietnam war and it just says that the codntainment war was a success thats all it says about the containment war it &nbsp;really just talks about the vietnam war</p>
    </div></td></tr></table><br></br></body></html>

我可以调整上面的html以使HtmlRender满意吗?如果HtmlRender不能按预期工作,还有哪些其他选项(.Net/C#)?非常感谢您的帮助!!

Html在不使用WebBrowser的情况下渲染到图像(C#/Net)

您可以使用无头浏览器(如PhantomJS)来完成此操作,该浏览器有一个NuGet包,您可以在项目中安装它。使用PhantomJS,您可以创建渲染页面的屏幕截图。

PhantomJS包与Selenium WebDriver和Selenium Web Driver Support Classes包搭配使用,可以对另一个stackerflow问题的答案中给出的方法进行轻微修改,从而进行屏幕截图,使用C#中的PhantomJS获取屏幕截图(请注意,您需要添加OpenQA.Selenium.PhantomJS、OpenQA.Selenium.Support.Extensions和System.Drawing.Imaging命名空间):

PhantomJSDriver driver = new PhantomJSDriver();
driver.Manage().Window.Maximize(); // optional
driver.Navigate().GoToUrl("file:///C://fullpath//file.html");
driver.TakeScreenshot().SaveAsFile("screenshot.png", ImageFormat.Png);
driver.Quit();

您可以尝试Awesomium。

它就像一个基于chromium浏览器的开源Web浏览器控件。