Я читаю html, используя компонент webbrowser в WPF. Я должен позволить user to give there own text, upload an image and save it as a.html file
.
Таким образом, я могу получить значение тега:
string myTagValue = (FrameWithinGrid.Document as mshtml.HTMLDocument)
.getElementsByTagName("div")
.OfType<mshtml.IHTMLElement>()
.First()
.innerText;
Как я могу get the value from a text box and save it as a.html file
включая новое изображение?
Нужна ваша помощь. Спасибо.
Это html файл:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>Welcome to Linguini Party!</title>
<style type="text/css">
* {
margin: 0;
}
html, body {
height: 100%;
font-family: Arial;
background-color: #e1dfe3;
color: #333333;
background-repeat: no-repeat;
}
h1 {
margin-right: 8%;
margin-left: 7%;
font-size: 450%;
text-align: center;
}
h2 {
font-size: 450%;
text-align: center;
color: #8a00ca;
font-style: italic;
}
</style>
</head>
<body id="Imagebg" background="welcome_final1.png">
<div id="container">
<h1 id="text1">Welcome to<br></h1>
<h2 id="text2">Linguini Party!</h2>
</div>
</body>
</html>
Одна из стратегий для этого - создать html-шаблон в соответствии с этим...
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body id="Imagebg" >
<div id="container">
<h1 id="text1">$$TEXT1$$<br></h1>
<h2 id="text2">$$TEXT2$$</h2>
<img src="$$IMAGELOCATION$$"/>
</div>
</body>
</html>
Этот шаблон был оснащен маркерами, такими как $$ TEXT1 $$. Они будут заменены специальным текстом позже.
Включите шаблон в качестве ресурса или в качестве внешнего файла или где угодно. Я предпочитаю включать его в качестве встроенного ресурса. Здесь настройки...
Вы не должны использовать встроенный ресурс, вы можете использовать WebBrowser
, чтобы получить HTML также. Мне нравится использовать ресурс, потому что он избегает исключений, вызванных отсутствующими или поврежденными файлами.
Следующий шаг прост. Здесь рабочая модель просмотра...
public class ViewModel
{
public string Text1 { get; set; }
public string Text2 { get; set; }
public string ImagePath { get; set; }
public string DestinationName { get; set; }
public void Start()
{
var resourceName = Assembly.GetExecutingAssembly().GetManifestResourceNames().Where(q => q.Contains("Template.html")).FirstOrDefault();
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
using (StreamReader reader = new StreamReader(stream))
{
string html = reader.ReadToEnd().Replace("$$TEXT1$$", Text1).Replace("$$TEXT2$$", Text2).Replace("$$IMAGELOCATION$$", ImagePath);
File.WriteAllText(DestinationName, html);
}
}
}
}
Модель просмотра получает различные свойства Text1 (и т.д.), Заданные вызывающим, а затем загружает шаблон HTML и заменяет маркеры на пользовательский контент. Затем он использует статический метод в файле для его сохранения.
Вы можете изменить эту стратегию, чтобы использовать любой другой тип инструментов, если это согласовано. Для более масштабируемого, полномасштабного решения я предлагаю HtmlAgility. Я использую его в течение многих лет.