WPF Webbrowser создает HTML-файл из пользовательского ввода

0

Я читаю 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>
  • 0
    Я бы использовал html-файл в качестве шаблона с маркерами формата и использовал его как ресурс проекта. Затем используйте String.Format, чтобы заполнить его. Сохраните его одним из статических методов класса File.
  • 0
    @Gary Гэри Васс: я понятия не имею, справиться. Не могли бы вы дать мне пример подхода? благодарю вас.
Показать ещё 2 комментария
Теги:
wpf
instrumentation
embedded-resource

1 ответ

1
Лучший ответ

Одна из стратегий для этого - создать 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 $$. Они будут заменены специальным текстом позже.

Включите шаблон в качестве ресурса или в качестве внешнего файла или где угодно. Я предпочитаю включать его в качестве встроенного ресурса. Здесь настройки...

Изображение 174551

Вы не должны использовать встроенный ресурс, вы можете использовать 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. Я использую его в течение многих лет.

  • 0
    Круто, отлично! Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню