正值我休息在家,陪着可爱的表妹时候,同学突然打电话问我,墩儿,你能做个报表么。
正好我闲啊,在家没啥事,就说可以,接下来了
此后才是噩梦的开始
要求很简单,把他的文本文档处理成报表就可以了
我太天真了。。。以为随便做一个就好就用php写了一个,感觉不够舒服又用java写了个,仔细想了几天,我日。。。他们不是软件公司啊。。。肯定要桌面程序。。。。fuck
然后拾起了大二后再没摸过的C#,下了个VS2017 community就开始做了,开始还挺简单,一边自学一边做,然后用MSChart做出来了 我日啊。。。好丑,而且 不!能!缩!放!
这是个死命的bug啊。。。我目光投向了嵌入浏览器一途,自带的webBrowser内置的是ie,调整ie的适应性比吃屎好不到哪去 我又去找怎么换这玩意内核,找了一个坑又一个坑以后发现了美妙的CefSharp,简直是救星,内置的是酷容心,完美!
//开发过程
//先创建工程,然后去工程属性调节所需要的.net版本 NUGET搜索cef下载你对应的版本(.net 4.0 对应 37.0.0版本)
命名空间引入 :
CefSharp;
CefSharp.WinForms;
//启动项目加入新类
InitBrowser();
//启动类写入
public ChromiumWebBrowser browser;
public void InitBrowser()
{
CefSettings setting = new CefSettings();
//字符编码固定utf-8
setting.Locale = "UTF-8";
//读取文件地址
string path = AppDomain.CurrentDomain.BaseDirectory + "\\chartPage.html";
//转换地址字符串
path = "file://" + path.Replace("\\", "/");
//打入设定
Cef.Initialize(setting);
//打入文件地址
browser = new ChromiumWebBrowser(path);
//添加控件
this.Controls.Add(browser);
//控件填满窗体
browser.Dock = DockStyle.Fill;
//注册js对象 GetJson是新的class 函数一定要有get
browser.RegisterJsObject("rtn", new GetJson());
}
//按键执行js fun = recall
private void Button2_Click(object sender, EventArgs e)
{
browser.ExecuteScriptAsync("recall()");
}
//静态变量 用于传递数据
class Staticvariable
{
public static string fileUrl;
}
//开放给js的接口
class GetJson
{
public string ReturnJson
{
get
{
//特定国量化
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
return "js";
}
然后html里面写
function recall() {
setData(rtn.returnJson);
}
function setData(data){
alert(data);
}
就可以打通了,如果data = json的话我是通过string拼json然后给html的。。。然后用js的json格式化方法JSON.parse(data);来做的
还有个困扰我很久的无法引用js文件的问题,换成cef以后完美解决