2018年5月19日星期六

多说评论完美迁移Disqus

多说评论完美迁移Disqus

版权声明:本文为博主原创文章,未经博主允许不得转载。

文章首发于 szhshp的第三边境研究所 ,转载请注明

不想看背景故事的可以直接查看翻迁移方法

背景故事

说实话这年头做的不错的免费服务真的不多,就比如为知笔记收费引发一场闹剧,不过幸好他们通过转型坚持下去了,同时我自己的1800+笔记也保留下来了。

一个月6块钱真的很多吗?

再然后就是悲剧的多说,其实通过转型或者一部分限制,比如根据用户付费情况限制每日评论数目等等,都可以解决问题。

只是最终官方选择关闭这个功能,也看得出他们的无奈。

当然既然多说关闭了我们自然要选择其他的评论插件,并且作为一个小小的博客,两年下来堆积了这么多评论实在不舍得全部启用,所以决定迁移到新的评论插件。

评论插件修改

多说宣布关闭后我试了好几个评论插件。首先关于全局设定:

  • Jekyll内核 
    • Jekyll内核就决定了和Hexo,WordPress以及其他可控主机不一样,最大的限制是Jekyll无法操作服务器,因此只能选择基于JS的评论插件
  • 无DB 
    • 这是第二个限制,因此无法自建评论系统,自建系统又简单又方便而且可以自己管理,然而自己的设定无法实现

基于以上设定,我测试了很多三方评论:

  1. 友言 
    • 一开始我用的就是友言,当初第一次友言换账号迁移评论的时候一直无法导出,提了一周的Issue一直无人反馈。留下非常不好的印象,故弃用。
  2. 畅言 
    • 一开始听说要备案,后来又发现随便输入一个合法网站备案号就行
    • 但是总会引发问题的吧
    • 弃用
  3. 网易云跟帖 
    • Bug超多,甚至令我觉得一开始的需求他们就没分析好。
    • 一开始建立一个测试站点,然后导入多说数据,导入了部分合法数据后,显示正常。
    • 但是上面是测试站点啊,所以我新建了一个正式站点然后重新导入所有合法数据,发觉之前导入的评论依然存在
    • 我猜想可能是站点名字依然是博客域名,于是把测试站点的对应站点写成一个乱七八糟的域名
    • 然而无效,难道我需要删除这个站点配置?呵呵居然没有删除按钮
    • 最终的结果就是评论区放满了乱七八糟的多个站点的评论,实际上是因为我导入了很多遍,虽然可以让他不显示但是总觉得很不自在。网易很明显在用域名进行索引,并且切换域名之后居然没有删除"修改前域名对应的评论"
    • 不能忍,强迫症又犯了,弃用
  4. 一些基于Github的评论功能 
    • 看到一些Repo,可以实现"在用户允许对方用户操作我方Repo的情况下对我方Repo数据文件进行修改"的评论插件
    • 然而我的代码在Coding,弃用
  5. 来必力 
    • 莫名其妙有人建议我用这个
    • 好像是个韩国插件
    • 我去都不能导入怎么玩
    • 弃用
  6. Disqus 
    • 我已经没有选择了
    • 关于国内加载……我去这篇文章你都看到这里了,连翻墙都不会嘛?加个Host都能解决问题啊

评论迁移

如果直接迁移不了,必然去找现成的工具。试用了几个插件:

  1. https://github.com/JamesPan/duoshuo-migrator [^s2]
  2. 多说评论迁移至Disqus [^s1]

一开始用的第一个,可能因为年代久远部分数据不够完整因此处理失败。

后来试用了第二个转换成功。

迁移方法程:

  1. 在多说后台下载评论文件,默认文件名是 export.json;
  2. 下载文件 migrate.php ,位置与export.json同级;
  3. 打开终端,进入文件 migrate.php 所在目录,执行 php -f migrate.php 即可在同级目录生成 disqus.xml 文件,前提是将 php 的可执行程序添加至环境变量;
  4. 在 Disqus 后台选择Generic(WXR)导入即可,地址是 
    https://{你的站点名}.disqus.com/admin/discussions/import/platform/wordpress/

参考文献

多说评论迁移至Disqus 
我把博客评论从多说迁移到 Disqus 时造的轮子

发布于:下午6:34 | 标签:

2018年4月28日星期六

科学使用 Disqus

当初选择静态博客就是想更简单的备份博文,但静态博客的评论本身就是问题,还好有 Disqus,感觉还挺好。然而前段时间我却为博客评论操碎了心,因为 Disqus 被墙了。

为什么还用 Disqus

在使用静态博客之前,我也是很犹豫,到底是使用什么来做评论框比较好?当时有想过用多说,好评如潮,功能相对齐全,但也看到不少人对它的评价也并不高,不是很稳定。最终,我还是选择老牌且逼格满满的 Disqus,因是社交评论框,当年也懂有被墙的隐患。

半年前,disqus.com 在国内大部,终于从"偶尔抽风"转向"完全被墙",这样一来,本来访问量就不多的博客,访客想留言、写写评论都得翻墙?我想不应该是这样的,如此博客评论功能就相当于废了。

那么,是不是该考虑更换评论系统?我在许久之前就考虑过转向多说,还好最终因为某些问题没转多说,它已经通知即将下线[1]。找一套评论系统程序,数据存储等用自己的主机,新博客可以这么干,但想要保留原评论,这个工程估计不会小。更别说自造评论系统了,我估计还搞不定。

评论系统能不换我就不会换,Disqus 目前依然是最大的第三方评论系统,不容易翻船。

怎么不换是个问题,Disqus 被墙已是事实,自己可以翻墙访问,但并不能保证每个访客都能翻墙,怎么解决?之前看过反向代理实现无需翻墙访问 Google,对 Disqus 而言,也许只能是反向代理。

事实上,我对正向代理、反向代理这些概念并不熟悉,也不曾想去配置服务器实现反向代理 Disqus,想想就感觉很复杂。

借路访问 Disqus

之前为了在首页显示评论计数,我折腾过 Disqus API。现在由于 Disqus 已被墙,并没法在网页中直接通过 XMLHttpRequest 来发起请求。除却浏览器可以发起请求,cURL 也能发起请求。

我想起了一种方法,想要实现不翻墙即可访问 Disqus API,可以找一个服务器,客户端数据把发送到这个服务器,它接过手后顺便使用 cURL 发给 Disqus,根据 Disqus 返回的内容,服务器可直接返回给客户端,也可以将其简单处理一下再返回,感觉这也是反向代理。

cURL 需要程序支持,要使用 cURL,就需要另外一台 VPS 或者支持 cURL 的虚拟主机等。理论上,境内的网络大多无法直接访问 Disqus,虽说可以使用指定 IP,但访问 Disqus 速度明显没有境外主机快,所以这台主机必须最好在境外。

下面,用简单的流程图(不一定标准),将这个过程画出来。

在 Disqus 可以流畅访问的情况下,我们可以这么使用 Disqus API:

开始客户端请求(XHR)Disqus 响应结束

如今 Disqus 被墙,因此我们可以这么搞:

开始客户端请求(XHR)服务器请求(cURL)Disqus 响应服务器响应结束

有了 libcurl,后端程序也能够发送请求,为了方便后续使用,我选择了 PHP cURL[2](毕竟 PHP 的虚拟主机好找)。

使用 Disqus API 的优点

到这里,我能想象得到使用 Disqus API 的优点不少,例如:

  • 不用翻墙即可使用
  • 样式可以完全自定义
  • 可实现 Disqus 评论框没有的功能
  • ……

优点那么多,想想都口水直流,但具体怎么实现才是大问题。

如何使用 Disqus API

提供评论的浏览及发表这两个功能,可以说是博客评论最为基础的。为了丰富文章列表页的显示,我还在首页放了相关文章评论数的显示。

我查看了 Disqus 的 API 文档[3],以上所述功能都找到了对应的 API 接口。

  • 评论计数 threads/list
  • 评论浏览 threads/listPostsposts/list
  • 评论发表 posts/create

至此,想要实现不翻墙使用 Disqus,研究的内容至少如下:

  • Disqus API 核心,其他围着它转
  • PHP 主要是 PHP cURL 的使用
  • HTML/CSS/JS 需要自己写一个评论框

相比较复制几行代码即可实现加载 Disqus 评论框,任不重,但道似乎还很远。

参考资料

  1. ^ 重要通知: 多说即将关闭
  2. ^ PHP: cURL - Manual
  3. ^ API Documentation - Disqus
发布于:下午10:53 | 标签:

利用FlashPaper实现类似百度文库功能

最近需要实现一个类似百度文库的功能,在Google上淘了一段时间,发现FlashPaper还算能够不错的实现此需求。

首先讲下思路:

1>安装FlashPaper;

2>利用java代码将doc等文件转换为swf文件;

3>页面展示swf即可。

 

关于FlashPaper的使用及安装这里就不再赘述,网上的资料很多,可以自行Google。

下面是java下如何利用FlashPaper将doc等文件转化为swf文件-->

@param swfName 指定生成的swf文件名
@param documentName 需要转换为swf的文档名

String converter = "C:\\Program Files\\Macromedia\\FlashPaper 2\\FlashPrinter.exe -o C:\\struts\\swf\\"
+ swfName + ".swf C:\\struts\\document\\" + documentName;

上述代码实际上就是调用FlashPrinter.exe实现转换功能。

 

用过FlashPaper的朋友可能会发现FlashPaper生成的swf文件左上角有Adobe的商标,非常不雅观,而且swf还可以下载,当然这就和百度文库的在线阅读相悖了。如何隐藏商标和取消打印按钮哪?更有甚,如何定制自己的FlashPaper swf文件哪?这才是本文着重要讲的地方。

首先展示下我自己定制的swf文件:

下面将讲述如何定制swf文件:

1:下载 http://download.csdn.net/source/3439538的DefaultViewer2.swf文件(PS:这里有点推荐自己资源的意思,请不要鄙视我,O(∩_∩)O哈哈~),在此swf文件的基础上实现自己的修改。

2:利用swf反编译工具,保存反编译过的.fla文件。

3:利用falsh制作工具(如Adobe Flash Professional CS5),打开此fla文件,找到第3个帧,添加下列代码即可实现定制(具体说明可以参加我的上一篇文章FlashPaper组件__API,隐藏即false,显示即true,请根据需要自行修改):

            gMainView.showUIElement("PrevNext", true);

            gMainView.showUIElement("Print", false);

            gMainView.showUIElement("Find", true);

            gMainView.showUIElement("Tool", false);

            gMainView.showUIElement("Pop", false);

            gMainView.showUIElement("Zoom", true);

            gMainView.showUIElement("Page", true);

            gMainView.showUIElement("Overflow", true);

4:将修改过的fla导出为swf文件,命名为DefaultViewer2.swf,找到FlashPaper的安装路径X:\Program Files\Macromedia\FlashPaper 2\Interface,覆盖下面的swf文件即可。

即完成swf的自定制。

 

 页面展示部分:

如果直接在页面上展示swf文件,那么有点IT常识的人依旧可以在客户端通过迅雷等软件捕获swf文件,然后下载下来,这样依旧不能保护swf文件。在这里我的解决方法是利用一个空swf文件来加载你需要展示的swf文件,这样即使swf被捕获也只能捕获到这个空swf文件。而且,切记空swf需要加密的,否则被反编译后依旧很容易找到你的展示文件。PS:如果朋友们有更好的展示swf的解决办法欢迎留言探讨。

 

综上:大致过程就是这样,希望对朋友们有帮助,毕竟网上类似的资料少之又少。 

如果有问题可以和我联系。O(∩_∩)O~ ~

发布于:下午10:46 | 标签:

使用FlashPaper在线转换.doc为.swf

FlashPaper 是Macromedia推出的一款电子文档类工具!通过使用FlashPaper,可以将需要的文档通过简单的设置转换为SWF格式的Flash动画,原文档的排版样式和字体显示不会收到影响,这样做的好处是不论对方的平台和语言版本是什么,都可以自由的观看你所制作的电子文档动画,并可以进行自由的放大,缩小和打印,翻页等操作!
展示的效果就像百度的文库查看效果。
Flashpaper的使用相信大多数人都知道,这里的Demo是用于在线转换 .doc文件转换为 .swf的flash文件。
其原理是通过进程指令对文件进行转换,所以会涉及到进程的操作,
而 doc转换为swf文件的指令则是:
"flashpaper执行文件路径 输入.doc文件路径 -o 输出.swf文件路径"
废话不多说,代码如下:
复制代码 代码如下:

/// <summary>
/// 执行进程
/// </summary>
/// <param name="sourceFileName">输入.doc文件路径</param>
/// <param name="outPutFileName">输出.swf文件路径</param>
public void ProcessExec(string sourceFileName, string outPutFileName)
{
//FlashPaper文件安装路径 可自行设置
string flashPrinter = "F:\\FlashPaper2.2\\FlashPrinter.exe";
Process pss = new Process();
pss.StartInfo.CreateNoWindow = false;
pss.StartInfo.FileName = flashPrinter;
pss.StartInfo.Arguments = string.Format("{0} {1} -o {2}", flashPrinter, sourceFileName, outPutFileName);
try
{
pss.Start();
while (!pss.HasExited)
{
continue;
}
System.Threading.Thread.Sleep(4000);
Response.Write("Succefull!");
}
catch (Exception ex)
{
throw ex;
}
}
protected void btnText_Click(object o, EventArgs e)
{
string source = Server.MapPath("~/Files/Doc.doc");
string output = Server.MapPath("~/Files/doc.swf");
ProcessExec(source, output);
}

其中FlashPaper文件在Demo中 FlashPaper文件夹,
安装方法很简单,将Flashpaper文件夹复制到待安装文件夹,在初始化文件夹中点击 初始化.bat 文件即可执行安装(无病毒,呵呵,可放心安装)。 
发布于:下午10:45 | 标签:

利用FlashPaper在web页面中显示PDF文件

利用FlashPaper在web页面中显示PDF文件(兼容各浏览器)

应项目需求要把PDF内嵌到网页中显示,其中有了很多办法,比如用<embed/>元素放入PDF文件,但是效果不理想,浏览器兼容不理想,在ie9/8(其他版本没有测试)显示会提示下载pdf文件。当然这不是我想要的效果,这种做法可以轻易地在网络上找到,我这里不就细说。

下面介绍的是另一种办法,就是借用FlashPaper软件改用swf格式来实现,各大浏览器对flash的支持已经相当友好了,除非用户禁止了现在flash。

一:FlashPaper

开始使用这款软件之前,花点时间来认识它,FlashPaper是Macromedia公司旗下的一款产品,它可以将Word,Excel,Powerpoint等文档转换为swf且不会影响到原来的图片和排版,使用户可以很方便的将其插入到网页中。

同类产品还有iSpring和Print2Flash,注意的是FlashPaper不支持64为系统,如需安装在64位系统上推荐使用Print2Flash。

iSpring和Print2Flash都可以将PPT转flash。iSpring是专门的PPT转flash软件,而且它也只能转PPT。FlashPaper可以支持任何类型文件转flash文件。更重要的是FlashPaper转换出来的Flash文件是基于网页式的浏览模式,而iSpring转换出来的Flash文件能保持好对原有PPT的浏览模式,如果需要将PPT转Flash我们极力推荐iSpring软件。


二:先下载安装FlashPaper软件。

安装后界面如下


然后把我们的PDF文件直接拖放进去,然后出现该解析过程


解析完成后出现界面如下


然后点file>exit就可以生成一个.swf的文件供我们网页使用。但是这样生成的文件 是带有一个Logo的。因为到这里为止,我们一直在用FlashPaper为我们提供的默认组件。该提供的默认组件包括如下图所示:


按照 FlashPaper 工作原理(利用原有的flash模版来把文档转换为swf文档)也就是说,如果我们想去掉LOGO我们就必须要自己定义 FlashPaper 组件,修改它里面的flash文件。


三,自定义 FlashPaper

我这里有一个定义好了的"DefaultViewer2.swf",你可以直接把它复制到你的Macromedia FlashPaper 2安装目录Interface中进行替换,重启软件后就可以使用自定义过的 FlashPaper 。


当然你也可以按照自己的需要定制属于自己的 FlashPaper 。

1:利用flash的反编译软件将.swf文件转换为.fla文件。我在这里使用的是"硕思闪客精灵7.1"。

现在进入到你的Macromedia FlashPaper 2安装目录Interface中找到"DefaultViewer2.swf"文件,把它拖进到"硕思闪客精灵"软件中,待完全放进去后,点击软件的上方"导出FLA/FLEX按钮,选择你要保存的位置和flash版本后点击确定,就可得到"DefaultViewer2.fla"文件。






2:用flash软件打开反编译过来的"DefaultViewer2.fla"文件,对其进行自定义。

在第三针位置即第二个a的位置按f9调出动作窗口,在最后一个if

  1. if (gMainView === undefined) 
  2.     fpLocalizations_o =new Object(); 
  3.     fpLocalizations_o.en = new FlashPaper.Localization.English(); 
  4.     fpLocalizations_o.de =new FlashPaper.Localization.German(); 
  5.     fpLocalizations_o.fr = new FlashPaper.Localization.French(); 
  6.     fpLocalizations_o.ja =new FlashPaper.Localization.Japanese(); 
  7.     fpLocalizations_o.es = new FlashPaper.Localization.Spanish(); 
  8.     fpLocalizations_o.it =new FlashPaper.Localization.Italian(); 
  9.     fpLocalizations_o.ko = new FlashPaper.Localization.Korean(); 
  10.     gMainView = new FlashPaper.MainView(this); 
  11.     gMainView.addListener(this); 
  12. } // end if 
[html] view plain copy
  1. if (gMainView === undefined)  
  2. {  
  3.     fpLocalizations_o = new Object();  
  4.     fpLocalizations_o.en = new FlashPaper.Localization.English();  
  5.     fpLocalizations_o.de = new FlashPaper.Localization.German();  
  6.     fpLocalizations_o.fr = new FlashPaper.Localization.French();  
  7.     fpLocalizations_o.ja = new FlashPaper.Localization.Japanese();  
  8.     fpLocalizations_o.es = new FlashPaper.Localization.Spanish();  
  9.     fpLocalizations_o.it = new FlashPaper.Localization.Italian();  
  10.     fpLocalizations_o.ko = new FlashPaper.Localization.Korean();  
  11.     gMainView = new FlashPaper.MainView(this);  
  12.     gMainView.addListener(this);  
  13. } // end if  


的里面加入自己定制的内容。

  1. if (gMainView === undefined) 
  2.     fpLocalizations_o =new Object(); 
  3.     fpLocalizations_o.en = new FlashPaper.Localization.English(); 
  4.     fpLocalizations_o.de =new FlashPaper.Localization.German(); 
  5.     fpLocalizations_o.fr = new FlashPaper.Localization.French(); 
  6.     fpLocalizations_o["zh-TW"] = new FlashPaper.Localization.TChinese(); 
  7.     fpLocalizations_o.es = new FlashPaper.Localization.Spanish(); 
  8.     fpLocalizations_o.it =new FlashPaper.Localization.Italian(); 
  9.     fpLocalizations_o["zh-CN"] = new FlashPaper.Localization.SChinese(); 
  10.     gMainView = new FlashPaper.MainView(this); 
  11.     gMainView.addListener(this); 
  12.     gMainView.showUIElement("PrevNext", true); 
  13.     gMainView.showUIElement("Print", false); 
  14.     gMainView.showUIElement("Find", true); 
  15.     gMainView.showUIElement("Tool", false); 
  16.     gMainView.showUIElement("Pop", false); 
  17.     gMainView.showUIElement("Zoom", true); 
  18.     gMainView.showUIElement("Page", true); 
  19.     gMainView.showUIElement("Overflow", true); 
  20. } // end if 
[html] view plain copy
  1. if (gMainView === undefined)  
  2. {  
  3.     fpLocalizations_o = new Object();  
  4.     fpLocalizations_o.en = new FlashPaper.Localization.English();  
  5.     fpLocalizations_o.de = new FlashPaper.Localization.German();  
  6.     fpLocalizations_o.fr = new FlashPaper.Localization.French();  
  7.     fpLocalizations_o["zh-TW"] = new FlashPaper.Localization.TChinese();  
  8.     fpLocalizations_o.es = new FlashPaper.Localization.Spanish();  
  9.     fpLocalizations_o.it = new FlashPaper.Localization.Italian();  
  10.     fpLocalizations_o["zh-CN"] = new FlashPaper.Localization.SChinese();  
  11.     gMainView = new FlashPaper.MainView(this);  
  12.     gMainView.addListener(this);  
  13.     gMainView.showUIElement("PrevNext", true);  
  14.     gMainView.showUIElement("Print", false);  
  15.     gMainView.showUIElement("Find", true);  
  16.     gMainView.showUIElement("Tool", false);  
  17.     gMainView.showUIElement("Pop", false);  
  18.     gMainView.showUIElement("Zoom", true);  
  19.     gMainView.showUIElement("Page", true);  
  20.     gMainView.showUIElement("Overflow", true);  
  21. } // end if  



 


3:将自定义好的"DefaultViewer2.fla"导出为DefaultViewer2.swf"文件(命名为DefaultViewer2.swf),找到FlashPaper的安装路径FlashPaper 2\Interface,覆盖下面的swf文件即可完成你的定义。


四:将pdf转换好的.swf文件插入到网页中

然后在按正常的插入.swf文件的方式插入即可。我这里测试的IE7+

  1. <embedsrc="name.swf" type="application/x-shockwave-flash" width="100%"height="1000px"> 
[html] view plain copy
  1. <embed src="name.swf"  type="application/x-shockwave-flash"  width="100%" height="1000px">  



五: FlashPaper  API

API(应用程序编程接口)是组件里预先定义的一些函数,目的是提供应用程序与开发人员访问组件,而又无须访问源码或者理解内部工作代码。为了用户能更好地对FlashPaper文档进行管理和进一步开发,FlashPaper也提供了一套API以供用户使用。用户只需要在Flash ActionScript 中调用FlashPaper API 就可以通过相应的函数获取FlashPaper文档的相关信息和对其进行控制。

我们只需修改安装FlashPaper目录中的"DefaultViewer2.fla"即可对FlashPaper进行修改。


属性摘要

 

属性

说明

documentPath:String

FlashPaper文件的路径.

borderThickness:Number

边框宽度.

borderColor:String

边框颜色.

UIElements:Object

外观元素的可见性.

currentZoom:Object

默认缩放比例.

width:Number

FlashPaper文件的宽度.

height:Number

FlashPaper文件的高度.










UIElements属性的图示




事件摘要

 

事件

说明

onLoadStart = function(target:FlashPaper, type:String) {}

当FlashPape文件已开始下载文件时调用.

onLoadProgress = function(target:FlashPaper, type:String, bytesLoaded:Number, bytesTotal:Number) {}

每当FlashPape文件写入硬盘时调用.

onLoadComplete = function(target:FlashPaper, type:String) {}

当FlashPape文件完全下载时调用.

onLoadInit = function(target:FlashPaper, type:String) {}

当执行FlashPape文件第一帧上的动作时调用.

onLoadError = function(target:FlashPaper, type:String, errorCode:String) {}

当FlashPape文件未能加载时调用.

onDisplay = function(target:FlashPaper, type:String) {}

当FlashPape文件已经显示时调用.

onUnload = function(target:FlashPaper, type:String) {}

当卸载FlashPape文件时调用.

onPageChanged = function(target:FlashPaper, type:String, newPageNumber:Number) {}

当FlashPape文件翻页时调用.

onZoomChanged = function(target:FlashPaper, type:String, percent:Number) {}

当FlashPape文件缩放时调用.

onSelection = function(target:FlashPaper, type:String) {}

当FlashPape文件的文字被选择时调用.

onToolChanged = function(target:FlashPaper, type:String, newTool:String) {}

当更换FlashPape文件的工具时调用.

onEnableScrolling = function(target:FlashPaper, type:String, enable:Boolean) {}

当FlashPape文件滚动时调用.

onVisibleAreaChanged = function(target:FlashPaper, type:String) {}

当FlashPape文件的哭件区域变化时调用.

方法摘要

 

方法

说明

load(path:String) : Void

载入一个FlashPape文件.

destroy() : Void

卸载FlashPape文件.

move(x:Number, y:Number) : Void

移动FlashPape组件).

toString() : String

返回组件的名称.

getIFlashPaper() : FlashPaper.IFlashPaper

返回一个实现IFlashPaper接口的对象.
如果这个函数未定义,那么载入的SWF文件不是一个FlashPaper 2.0文件.
如果这个函数存在,但是返回null或undefined,那么载入的SWF文件是一个FlashPaper 2.0文件,但是还没有载入足够的内容去实现这个API;你必须等待载入足够的内容并且再次调用它.

getViewerType() : String

返回一个描述包含SWF文件的接口的类型的字符串.
这个Macromedia FlashPaper标准阅读器总是返回Macromedia FlashPaper Default Viewer.

getViewerVersion() : Number

返回一个标识这个文件接口版本代号整数.
返回的整数不是连续的,但是这个整数显示阅读器最近的版本 ,而且可以显示除错或增强的功能.
比如FlashPaper 2.01返回 218.

getCurrentPage() : Number

返回当前页数(与工具栏显示的相同).第一页是1.

setCurrentPage(pageNumber:Number) : Void

设置当前页数.需要保证此页是可显示的,但不必调节缩放.

getNumberOfPages() : Number

返回文件总页数.
注意: 也许不是所有的页都是可显示的, 屈就于连接速度.

getLoadedPages() : Number

返回当前载入的页数(可显示的).
这个数值一定在0到getNumberOfPages()之间.

getLoadedPages() == getNumberOfPages()

时,这个文件便完全载入.

showUIElement(part:String, flag:Boolean) : Void

应藏或者显示FlashPaper文件外观的部件.区分大小写:

"PrevNext" 前一页和后一页按钮的隐藏或显示.
注意: 如果这些按钮是隐藏的,当前页文字框回失效,但不会隐藏.

"Print" 打印按钮的隐藏或显示.

"Tool"所有工具选择按钮的隐藏或显示.

"Zoom" 所有所放控制按钮的隐藏或显示.

"Find"文字搜索框的隐藏或显示.

"Pop" 在浏览器中打开文件按钮的隐藏或显示.

"Sidebar"边框 (显示文件边框)按钮的隐藏或显示.
注意: 这个变量无论这个文件是否包括边框i; 没有边框的文件从不显示边框按钮.

"Page" 当前页和总页数按钮的隐藏或显示

"Overflow" 超出菜单的隐藏或显示.
注意:这个菜单仅在工具条太狭窄而不能显示时;你不能用这个变量强制显示超出菜单.

"ZoomKeys" 这个参数不影响外观;他控制是否能用快捷键所放文件(例如, +, -, p, w).

"Brand" 品牌按钮的隐藏或显示.[注:此属性设置false也无法隐藏左上角FlashPaper的标志,估计是因为Adobe不太希望自己的标志被隐藏,既然这样,不知道这个Brand还存在于API中还有什么意义]

"Close" 关闭按钮的隐藏或显示.

traceUIElements() : Void

输出UI Elements的可见性.

printTheDocument() : Boolean

模仿用户单击答应按钮. 在调用函数前,文件必须完全载入.

getCurrentZoom() : Number

返回当前缩放水平.
注意: 缩放水平总是返回一个数值r;不会返回页面宽度.

setCurrentZoom(percent:Object) : Void

设置当前缩放水平.你可以传入一个数值指示所放百分比 (例如, 100表示100%)..你也可以传入一个字符串 "width"适合页面宽度,或者传入字符串 "page"适合到页.

setSize(w:Number, h:Number) : Boolean

设置组件的显示排列,单位是象素.
如果成功设置则返回true,不成功则返回false.

goToLinkTarget(linktarget:String, window:Object) : Void

触发锚点或URL连接请求.
如果传入的字符串是锚点名称:foo,当前视图会移动到那个锚点.window参数会被忽视.如果foo不是一个有效的锚点名称,则不会执行动作.对于其它的字符串,会执行getURL(linktarget, window) (想了解更多的信息,请见ActionScript文档).

enableScrolling(flag:Boolean) : Boolean

阻止用户滚动文件.当滚动被禁止时:

滚动条不可用,但是可见.
滚动按钮不可用.
使用鼠标滚轮滚动不可用.

getCurrentTool() : String

返回当前活动的工具.如果没有活动的工具,则返回空字符串.以下是现在支持的值:

"" (没有工具)
"pan" (手形工具)
"select" (文字选择工具)

setCurrentTool(tool:String) : Boolean

设置活动工具.如果参数错误或者该工具不可用则返回false.以下是现在支持的值:

"" (没有工具)
"pan" (手形工具)
"select" (文字选择工具)

getTextSelectionRange() : FlashPaper.SelectionRange

返回一个描述当前选择文字的对象.如果没有选择文字,则返回null.
注意:与getVisibleArea()返回的对象不同,这个函数总是返回一个FlashPaper.SelectionRange,这是一个明确定义的对象, 你可以检查,分解或者构造一个新的对象.

setTextSelectionRange(sel:FlashPaper.SelectionRange, skipBroadcast:Boolean) : Void

选择特定的文字.你可以传入null,从而取消选定所有的文字.无效的范围(没有页面)会被省略(它允许你设定范围从0到一个很大的数,例如999999,从而选定所有文档).如果skipBroadcast是false (或未定义), 会广播onVisibleAreaChanged(). 如果skipBroadcast是true, 则不会广播onVisibleAreaChanged().
注意:与getVisibleArea()返回的对象不同,这个函数总是返回一个FlashPaper.SelectionRange,这是一个明确定义的对象, 你可以检查,分解或者构造一个新的对象.

getSelectedText() : String

以Unicode编码的字符串返回选择的文字.如果每有被选择的文字,会返回空字符串.

getSidebarWidth() : Number

返回其他按钮的宽度.
没有边框的文件会返回0.

setSidebarWidth(w:Number) : Void

设置其他按钮的宽度.
传入0从而完全隐藏其他按钮.
没有边框的文件会忽视调用.

getFindText() : String

以Unicode编码的字符串返回查找的文字.

setFindText(s:String) : Void

设置文字查找框的文字.
这个函数不会执行查找操作或改变当前选择.

findNext() : Boolean

查找文字查找框中输入的文字.
从当前选择文字的后面开始查找.
要从文档的开头查找,请先调用setSelectionRange(null).
如果找到了文字,调用getTextSelectionRange()返回详细的范围.

getVisibleArea() : Object

返回描述文档当前可见区域的对象.返回的对象有如下作用:

传入setVisibleArea().
这个可以用来在不同的计算机上观看同一文档,而且可以保持同步.

与先前getVisibleArea()返回的对象进行比较,测试可见区域是否改变.

返回的对象应该被认为是封闭的数据结构.不要试图分解返回的对象,因为在将来的版本中内容的格式可能不同.
这个对象唯一不变的方法是:

function equals(that:Object):Boolean;


我们可以用它比较两个可见区域是否相同.

setVisibleArea(area:Object, skipBroadcast:Boolean) : Void

调节当前可见的页/缩放/滚动从而匹配给定的区域对象.
如果skipBroadcast是false (或未定义), 会广播onVisibleAreaChanged().如果skipBroadcast是true, 则不会广播onVisibleAreaChanged().
传入的对象必须是先前由getVisibleArea返回的对象.
不要试图创建你自己的对象,因为在将来的版本中内容的格式可能不同.


 

五:参考文献

  1. 调用FlashPaper API控制FlashPaper文档界面
  2. 本文用到的软件工具和文件下载
发布于:下午10:44 | 标签:

一键分享 Share

评论