HTML рендеринга в изображение (C#/Net) без использования веб-браузера

У меня есть html строка / документ (если вы просматриваете исходную веб-страницу в браузере IE, полученный html-код), хранящиеся в базе данных, и мне нужно преобразовать этот html в изображение с помощью C#/.NET wcf service. Текущий код использует WebBrowser, и он работает нормально, за исключением того, что он довольно медленный и время от времени сталкивается с проблемами.

Я хочу заменить эту возможность (преобразование HTML в изображение.png) без использования WebBrowser. Я попытался использовать TheArtofdev.HtmlRenderer, который, кажется, решает большинство проблем, но, кажется, сталкивается с проблемами, когда сталкивается с HTML (может содержать несколько "div>" может быть?), Как следующий HTML, и он не генерирует изображение правильно. генерирует только частичное изображение для этого 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? Какие есть другие варианты (.Net/C#), если HtmlRender работает не так, как ожидалось? Высоко ценю любую помощь!

2 ответа

Вы могли бы сделать это, используя безголовый браузер, такой как PhantomJS, в котором есть пакет NuGet, который вы можете установить в своем проекте. С PhantomJS вы можете создать скриншот отрендеренной страницы.

Пакет PhantomJS в паре с пакетами поддержки классов Selenium WebDriver и Selenium WebDriver позволяет сделать снимок экрана, используя небольшую модификацию метода, приведенного в ответе на другой вопрос stackru, получение снимка экрана с помощью PhantomJS в C# (обратите внимание, что вам понадобится чтобы добавить пространства имен 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.

Другие вопросы по тегам