Html渲染到图像(C#/ Net)而不使用WebBrowser

时间:2015-12-15 20:56:07

标签: c# html-rendering rendertargetbitmap wkhtmltoimage

我有html字符串/文档(如果您在IE浏览器中查看源代码中的任何网页,生成的html代码)存储在数据库中,我需要使用C#/ .Net wcf服务将此html转换为图像。当前的代码正在使用WebBrowser,它工作正常,除非它很慢并且偶尔会遇到问题。

我想在不使用WebBrowser的情况下替换此功能(html转换为.png图像)。我试图使用TheArtofdev.HtmlRenderer来解决大多数问题,但是当它遇到html(包含多个" div>"可能是?)时似乎会遇到问题,就像下面的html一样,并且它没有&#39 ; t正确生成图像。它只生成此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#)?非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

您可以使用headless browser PhantomJS执行此操作,NuGet package可以在项目中安装create a screenshot。使用PhantomJS,您可以Selenium WebDriver呈现页面。

Selenium WebDriver Support ClassesGetting screenshot using PhantomJS in C#软件包配对的PhantomJS软件包允许您使用对另一个stackoverflow问题operator precedence的答案中给出的方法稍作修改来截取屏幕截图(请注意,您需要添加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();

答案 1 :(得分:0)

您可以尝试Awesomium

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