CyberArticle二次开发手册 – 5、CyberArticle 文章
每一个CyberArticle文章,都是一个HTML文件。CyberArticle将HTML以及所包含的图片等资源,打包并压缩成一个zip数据包,保存在数据库的Nodes.Article字段内。
文章节点,都有一个Article属性,可以获得HTML文章对象(ICAArticle)。
ICAArticle对象的主要属性和方法
- SaveAsHTML:保存成一个HTML文件。采用unicode编码。
- SaveAsHTMLAnsi:保存成一个HTML文件,采用ansi或者多字节编码,例如gb2312,utf-8等编码。具体编码,由html文件里面原始的编码指定。如果原始编码是unicode,则保存后采用utf-8编码。
- SaveAsHTMLAnsiEx:保存成HTML文件,采用ansi或者多字节编码。可以指定是否允许使用utf-8编码。如果不允许使用utf-8,则会采用当前系统的默认字符集老保存那些unicode文件。
- SaveAsMime:保存成mime文件,扩展名一般是.mht。
- Children属性:或者HTML资源(ICAArticleResourceCollection)。
ICAArticleResourceCollection说明
ICAArticleResourceCollection是一个文章资源集合,除了具有Count和Item两个属性外,还有其它几个重要的方法。利用这个对象,可以删除或者更新某一个文章资源,例如更新或者删除里面的某一个图片。
- Count:获得HTML资源的数量。包括HTML代码本身。
- Item:活的某一个资源。Item(0)就是文章的HTML代码(ICAArticleResource)。
- ItemFromName:通过资源名称,获得某一个资源。按照名称查找的时候,不区分大小写。
- BeginUpdate:开始更新资源。如果要删除或者更新某一个资源,在删除或者更新之前,需要调用该方法。
- EndUpdate:结束更新资源。如果要删除或者更新某一个资源,在删除或者更新之后,需要调用该方法。调用之后,会把修改后的数据保存到数据库。
- GetArticleSourceCode:获得文章的HTML代码。在调用GetArticleSourceCode之前,不需要调用BeginUpdate。
- SetArticleSourceCode:设置文章的HTML代码。在调用SetArticleSourceCode之前,也需要调用BeginUpdate。之后调用EndUpdate,才会保存数据。
ICAArticleResourceCollection对象主要的功能,就是可以单独更新或者删除某一个资源。
ICAArticleResource对象主要属性和方法
通过ICAArticleResourceCollection.Item,可以获得每一个文章资源。文章资源对象就是ICAArticleResource。
- Name:资源名称,就是保存成HTML之后的文件名(不包含路径)
- URL:资源的URL,例如HTML里面的某一个图片的原始URL。
- Size:资源的大小。
- SaveToStream:将资源数据,保存到一个IStream里面。
例子
下面的代码,我们在一个书籍内建立一个新的文章,然后把文章保存成HTML文件,并且获得其中的每一个文章资源,显示出文章资源的名称和URL。
function jsAlert(msg)
{
return objShell.Popup(msg, 10000, “CyberArticle”, 0);
}
function Test()
{
var objBookCollection = new ActiveXObject(“CyberArticleBook.CABookCollection”);
for (var i = 0; i < objBookCollection.Count; i++)
{
var objBook = new ActiveXObject(“CyberArticleBook.CABook”); //创建ICABook对象
//
var guidBook = objBookCollection.GUID(i); //获得书籍的GUID
try
{
objBook.Open(guidBook); //打开书籍
}
catch (e)
{
continue;
}
//…
var nodeRoot = objBook.RootNode;
//
var nodeArticle = objBook.CreateArticle(nodeRoot, “My Article”); //创建文章
//文章html
var htmlText = “<html><head><title>My First SDK Article</title></head><body><h1>My First SDK Article</h1><p>Test text…</p><img src=http://www.wizbrother.com/screenshots/cyberarticle.png></img></body></html>”;
//创建一个profile
var objProfile = new ActiveXObject(“CyberArticleBook.CAProfile”);
objProfile.Name = “Test”;
objProfile.IncludeImages = true;
objProfile.DownloadItems = true;
//使用html文字设置文章内容
nodeArticle.InitArticle(htmlText, “”, objProfile);
//
var objArticle = nodeArticle.Article; //获得ICAArticle对象
objArticle.SaveAsHTML(“T:\\temp\\1.htm”); //保存成HTML文件
//
var objArticleResourceCollection = objArticle.Children; //获得ICAArticleResourceCollection
for (var iResource = 0; iResource < objArticleResourceCollection.Count; iResource++)
{
var objArticleResource = objArticleResourceCollection.Item(iResource);
//
if (0 == iResource)
{
//第一个资源,显示HTML代码
jsAlert(objArticleResourceCollection.GetArticleSourceCode());
}
else
{
//显示资源名称和URL
jsAlert(objArticleResource.Name + “\n” + objArticleResource.URL);
}
}
//…
objBook.Close();
//
return;
}
}
Test();
程序运行后的效果如下图:
Item(0),显示文章HTML代码。注意看里面有一个%ResourceFilePath% / cyberarticle[1].png。在CyberArticle保存后的HTML代码里面,%ResourceFilePath%代表了HTML资源所在的子目录名称,例如xxx_files。在保存成html的时候,CyberArticle会自动替换。

下面显示了资源的名称和URL(就是初始化html的时候引用的图片)。

从上面的的例子中可以看到,通过文章对象,可以轻松的操作CyberArticle里面的文章。

最近评论