WPF Webbrowser从用户输入创建html文件

时间:2013-12-15 11:42:56

标签: c# html wpf embedded-resource instrumentation

我正在使用WPF中的webbrowser组件阅读html。我应该让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>

1 个答案:

答案 0 :(得分: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 $$之类的标记进行检测。这些将在以后用自定义文本替换。

将模板包含为资源,或作为外部文件或任何位置。我选择将其作为嵌入式资源包含在内。这是设置......

enter image description here

要使用嵌入式资源,您也可以使用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);
            }
        }
    }
}

View Model获取调用者设置的各种Text1(etc)属性,然后加载HTML模板并用自定义内容替换标记。然后它使用File上的静态方法来保存它。

您可以修改此策略以使用任何其他类型的工具,只要它一致。对于更具伸缩性,更全面的解决方案,我建议HtmlAgility。我已经使用它多年了。