STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构

STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构

STSdb是什么

再来说明一下STSdb是什么:STSdb是C#写的开源嵌入式数据库和虚拟文件系统,支持实时索引,性能是同类产品的几倍到几十倍,访问官方网站

 

温故知新

之前发了文章《STSdb,最强纯C#开源NoSQL和虚拟文件系统》,相信大家对Waterfall-tree(瀑布树)算法还是有兴趣的。

 

不兼容改动

 为了提供更易容的API和更好的性能,STSdb 4.0 RC2改变了文件格式,这个改变可能会持续,直到4.0正式版。

 

C/S架构

在上一篇文章,提及会在4.0正式版之前加入对C/S的支持,现在在RC2已经引入。

客户端

?
//客户端,创建一个连接:
using  (IStorageEngine engine = STSdb.FromNetwork(host, port))
{
}

服务器端

?
//服务器端,启动一个服务器实例
using  (IStorageEngine engine = STSdb.FromFile( "stsdb4.sys" , "stsdb4.dat" ))
{
     var server = STSdb.CreateServer(engine, port);
     server.Start();
     //服务器端已经启动,可以接受客户端请求
     server.Stop();
}

 

DataType类型

DataType类型用于描述非泛型的IIndex和IData数据类型

?
//以前的做法
XIndex<IData, IData> table = engine.OpenXIndex( typeof (Data< int >), typeof (Data< string >), "table" );
//新做法
IIndex<IData, IData> table = engine.OpenXIndex(DataType.Int32, DataType.String, "table" );

  

?
//以前的做法
XIndex<IData, IData> table = engine.OpenXIndex( typeof (Data< long >), typeof (Data< string , DateTime, double , double , long , string >), "table" );
//新做法
DataType keyType = DataType.Int64;
DataType recordType = DataType.Slotes(
     DataType.String,
     DataType.DateTime,
     DataType.Double,
     DataType.Double,
     DataType.Int64,
     DataType.String
);
IIndex<IData, IData> table = engine.OpenXIndex(keyType, recordType, "table" );

 

公有字段

IIndex现在支持公有字段的读写

 

List<T>, T[]和Dictionary

在4.0 RC2仍然不支持,但会在4.0 Final支持

 

下载

点击这里下载源代码

 

 

自动化工具word文档批量转html

 

企业有很多的科室,科室的每个人或多或少都会写一些文档,有些文档领导需要浏览,解决的办法是将编辑的文档打印出来,供领导浏览,或是为了节约企业成本,文档就在人与人这间或部门之间copy过来,copy过去。如果员工或领导不善于管理文档,就会造成有很多的版本,或者是在以后无法轻松的找到相关的文档。

所以企业专门找到一个人(文档管理员),让这个人负责文档的管理。而文档的管理的方式有两种形式,第一种是doc形式的(即word文档),第二种是分享形式的

对于第一种文档管理方式,只涉及到这个文档管理员,收集各部门的文档,将部门规划成一种如下图的形式:

然后在部门中再规划人员,如下图:

STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构

 

通过第一种形式,那么文档的管理也就解决了。只保存最新文档,对文档进行汇总等,如果领导需要什么文档的话,只需要让文档管理员打印并呈送就可以了。

但是领导或职员需要什么文档?领导也不是一台机器,没有过目不忘的本领,并不知道公司有什么文档?如果文档中有错字有谁来发现?所以为了解决这几个问题,需要实现文档的分享,也就是第二种文档管理方式。

解决思路是在局域网中建立一个网站,企业中的任何一个人都可以浏览公司的文档。通过这个网站,企业中的任何一个人也都知道本企业有什么文档,寻找资料也会方便些。

网站也很简单,只需要实现目录结构上的复制,部门对应部门,人员对应人员。再把doc转换成html,文档名称对应页面名称。然后再自动生成网站首页,这个网站也就做完了。

技术实现:
在这里只是大体介绍一下,如果需要了解技术详细的话,可以下载下面的源代码。

1.给定需要转换的目录(包含word文档的目录)和输出目录
2.读取目录中的所有word文档
3.将所有的word文章转换成Html文件,并将html文件保存到输出目录下对应的目录(即部门对应部门,人员对应人员),代码如下

复制代码
public void ToHtml(string filePath)  
{
    this.FilePath = filePath;
    Word.Application word = new Word.Application();
    Type wordType = word.GetType();
    Word.Documents docs = word.Documents;
    Type docsType = docs.GetType();
    Word.Document doc = (Word.Document)docsType.InvokeMember("Open",
        System.Reflection.BindingFlags.InvokeMethod, null, docs,
        new Object[] { (object)FilePath, true, true }); //打开word文档
    Type docType = doc.GetType();
    CreateDirectory(TargetDirectoryPath);  //源目录对应目标目录 
    string strSaveFileName = TargetFilePath;  //转换成目标文件路径
    object saveFileName = (object)strSaveFileName;
    //另存为html,关闭文档并退出
    docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,
        null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML });
    docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);
    wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
}
复制代码

word转为html后,测试页面样式:

STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构

4.生成首页,并将首页保存到输出目录下。为使首页结构清晰,使用了jquery插件treeview。

复制代码
public string ToHtmlStructure(DirectoryInfo directory)
{
            
    FileInfo[] files = null;
    DirectoryInfo[] subDirs = null;
    files = directory.GetFiles("*.*");
    _sb.AppendLine(AddUl());
    foreach (FileInfo fi in files)
    {

        string relativelinks = Uri.EscapeUriString(fi.FullName.Replace(string.Format(@"{0}\", DirectoryPath), "").Replace('\', '/'));
        _sb.AppendLine(string.Format("<li><a href='{0}' target='_blank'>{1}</a></li>",relativelinks, fi.Name));
    }
    subDirs = directory.GetDirectories();
    foreach (DirectoryInfo dirInfo in subDirs)
    {
        _sb.AppendLine("<li>");
        _sb.AppendLine(dirInfo.Name);
        ToHtmlStructure(dirInfo);
        _sb.AppendLine("</li>");
    }
    _sb.AppendLine("</ul>");
    return _sb.ToString();
}
复制代码

生成的首页显示大体如下(非企业的文档,而是自己的文档):

STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构

开发环境:win7+vs2010+office2007

测试环境:win7+office2007

总结:
在开发这个工具时,最主要的还是word转html。而我使用的方式是com方法调用word的open,saveas,close和quit。这种方式会在word的最近浏览记录中留下信息,如下:

STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构

并且html的生成完全由word控制,生成的html的样式也完全由word控制。有的文章转换为html后,显得html内容不美观。我测试了一下,安装不同的office版本,office2003(无法转换高版本的文档),office2007,office2010,版本越高,转换后的html样式越好。

我也在网上寻找了word转html的控制方式(包括国内的、国外的),发现如果想完全控制转换,似乎是不可能的。当然也有doc转换工具,如google doc。不知道我这个观点对不对?

 

源代码下载:源码Convertor.rar

 
 
 
标签:  wordhtml自动化工具
 

你可能感兴趣的:(html,word,自动化工具)