我们知道,PHP语言的合理运用可以帮助我们实现导出Word文档的功能。今天我们将为大家介绍PHP处理Word转PDF的相关实现方法。

  PHP处理Word转PDF代码示例:

PHP代码
  1. <?php       
  2. set_time_limit(0);       
  3. function MakePropertyValue($name,$value,$osm){       
  4. $oStruct = $osm->Bridge_GetStruct       
  5. ("com.sun.star.beans.PropertyValue");       
  6. $oStruct->Name = $name;       
  7. $oStruct->Value = $value;       
  8. return $oStruct;       
  9. }       
  10. function word2pdf($doc_url$output_url){       
  11. $osm = new COM("com.sun.star.ServiceManager")       
  12. or die ("Please be sure that OpenOffice.org     
  13. is installed.
    "
    );       
  14. $args = array(MakePropertyValue("Hidden",true,$osm));       
  15. $oDesktop = $osm->createInstance("com.sun.star     
  16. .frame.Desktop");       
  17. $oWriterDoc = $oDesktop->loadComponentFromURL       
  18. ($doc_url,"_blank", 0, $args);       
  19. $export_args = array(MakePropertyValue       
  20. ("FilterName","writer_pdf_Export",$osm));       
  21. $oWriterDoc->storeToURL($output_url,$export_args);       
  22. $oWriterDoc->close(true);       
  23. }       
  24. $output_dir = "D:/LightTPD/htdocs/";       
  25. $doc_file = "D:/LightTPD/htdocs/2.doc";       
  26. $pdf_file = "2.pdf";       
  27. $output_file = $output_dir . $pdf_file;       
  28. $doc_file = "file:///" . $doc_file;       
  29. $output_file = "file:///" . $output_file;       
  30. word2pdf($doc_file,$output_file);       
  31. ?>  

 在网上看到一篇文章介绍五个免费开源的数据挖掘软件,转过来。

Orange

Orange [attach=2567]是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++ 和 Python开发,它的图形库是由跨平台的Qt框架开发。

RapidMiner

RapidMiner, 以前叫 YALE (Yet Another Learning Environment), 其是一个给机器学习和数据挖掘和分析的试验环境,同时用于研究了真实世界数据挖掘。它提供的实验由大量的算子组成,而这些算子由详细的XML 文件记录,并被RapidMiner图形化的用户接口表现出来。RapidMiner为主要的机器学习过程提供了超过500算子,并且,其结合了学习方案和Weka学习环境的属性评估器。它是一个独立的工具可以用来做数据分析,同样也是一个数据挖掘引擎可以用来集成到你的产品中。

 

Weka

由Java开发的 Weka (Waikato Environment for Knowledge Analysis) 是一个知名机器学机软件,其支持几种经典的数据挖掘任务,显著的数据预处理,集群,分类,回归,虚拟化,以及功能选择。其技术基于假设数据是以一种单个文件或关联的,在那里,每个数据点都被许多属性标注。 Weka 使用Java的数据库链接能力可以访问SQL数据库,并可以处理一个数据库的查询结果。它主要的用户接品是Explorer,也同样支持相同功能的命令行,或是一种基于组件的知识流接口。

JHepWork

为科学家,工程师和学生所设计的 jHepWork 是一个免费的开源数据分析框架,其主要是用开源库来创建 一个数据分析环境,并提供了丰富的用户接口,以此来和那些收费的的软件竞争。它主要是为了科学计算用的二维和三维的制图,并包含了用Java实现的数学科学库,随机数,和其它的数据挖掘算法。 jHepWork 是基于一个高级的编程语言 Jython,当然,Java代码同样可以用来调用 jHepWork 的数学和图形库。

KNIME

KNIME (Konstanz Information Miner) 是一个用户友好,智能的,并有丰演的开源的数据集成,数据处理,数据分析和数据勘探平台。它给了用户有能力以可视化的方式创建数据流或数据通道,可选择性地运行一些或全部的分析步骤,并以后面研究结果,模型 以及 可交互的视图。 KNIME 由Java写成,其基于 Eclipse 并通过插件的方式来提供更多的功能。通过以插件的文件,用户可以为文件,图片,和时间序列加入处理模块,并可以集成到其它各种各样的开源项目中,比如:R语言,Weka, Chemistry Development Kit, 和 LibSVM.

源文:http://www.junauza.com/2010/11/free-data-mining-software.html(墙)

两天,jnj在本站发布了《如何在低速率网络中测试 Web 应用》,那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以及你的网站的性能。我相信,北京奥组委的订票网站的开发团队并不知道有这样的测试工具。

Grinder –  Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利。 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理。根据项目网站的说法,Grinder的 主要目标用户是“理解他们所测代码的人——Grinder不仅仅是带有一组相关响应时间的‘黑盒’测试。由于测试过程可以进行编码——而不是简单地脚本 化,所以程序员能测试应用中内部的各个层次,而不仅仅是通过用户界面测试响应时间。

Pylot -Pylot是一款开源的测试web service性能和扩展性的工具,它运行HTTP 负载测试,这对容量计划,确定基准点,分析以及系统调优都很有用处。Pylot产生并发负载(HTTP Requests),检验服务器响应,以及产生带有metrics的报表。通过GUI或者shell/console来执行和监视test suites。

Web Capacity Analysis Tool (WCAT) – 这是一种轻量级负载生成实用工具,不仅能够重现对 Web 服务器(或负载平衡服务器场)的脚本 HTTP 请求,同时还可以收集性能统计数据供日后分析之用。WCAT 是多线程应用程序,并且支持从单个源控制多个负载测试客户端,因此您可以模拟数千个并发用户。该实用工具利用您的旧机器作为测试客户端,其中每个测试客户端又可以产生多个虚拟客户端(最大数量取决于客户端机器的网络适配器和其他硬件)。您可以选择使用 HTTP 1.0 还是 HTTP 1.1 请求,以及是否使用 SSL。并且,如果测试方案需要,您还可以使用脚本执行的基本或 NTLM 身份验证来访问站点的受限部分。(如果您的站点使用 cookie、表单或基于会话的身份验证,那您可以创建正确的 GET 或 POST 请求来对测试用户进行身份验证。)WCAT 还可管理您站点可能设置的任何 cookie,所以配置文件和会话信息将永久保存。

fwptt – fwptt 也是一个用来进行WEB应用负载测试的工具。它可以记录一般的请求,也可以记录Ajax请求。它可以用来测试 asp.net, jsp, php 或是其它的Web应用。

JCrawler – JCrawler是一个开源( CPL) 的WEB应用压力测试工具。通过其名字,你就可以知道这是一个用Java写的像网页爬虫一样的工具。只要你给其几个URL,它就可以开始爬过去了,它用一种特殊的方式来产生你WEB应用的负载。这个工具可以用来测试搜索引擎对你站点产生的负载。当然,其还有另一功能,你可以建立你的网站地图和再点击一下,将自动提交Sitemap给前5名的搜索引擎!

Apache JMeter – Apache JMeter是一个专门为运行和服务器装载测试而设计的、100%的纯Java桌面运行程序。原先它是为Web/HTTP测试而设计的,但是它已经扩展以支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库中的服务器的运行情况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换的界面用来定制数据显示,测试同步及测试的创建和执行。

Siege -Siege(英文意思是围攻)是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。 Siege 支持基本的认证,cookies, HTTP 和 HTTPS 协议。

http_load – http_load 以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。可以可以测试HTTPS类的网站请求。

Web Polygraph – Web Polygraph这个软件也是一个用于测试WEB性能的工具,这个工具是很多公司的标准测试工具,包括微软在分析其软件性能的时候,也是使用这个工具做为基准工具的。很多招聘测试员的广告中都注明需要熟练掌握这个测试工具。

OpenSTA – OpenSTA是一个免费的、开放源代码的web性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网站。其还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过proxy 的一切HTTP/S traffic。通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析。 

如果你处在局域网的内网中,想获取你的外网IP地址。这里有一个使用Javascript调用ip138获取外网IP的方法,十分简单,代码如下:

 

JavaScript代码
  1. <script language="javascript">      
  2. xml=new ActiveXObject("Microsoft.XMLHTTP");      
  3. xml.open("GET","http://www.ip138.com/ip2city.asp",false);      
  4. xml.send();      
  5. kk=xml.ResponseText;      
  6. i=kk.indexOf("[");      
  7. ie=kk.indexOf("]");      
  8. ip=kk.substring(i+1,ie);      
  9. document.write("<span style=‘color:red;font-size:12;‘ cursor=‘hand‘>您的IP地址是:" + ip + "</span>");      
  10. </script>  

 

  SSL、SET和PGP是当前Internet 上比较常用的加密方法,它们在各自的应用范围内都拥有很大的用户群。本文将对这三种流行的加密方法做一比较介绍。

  SSL(Secure Socket Layer)

  SSL协议是由Netscape首先发表的网络资料安全传输协定,其首要目的是在两个通信间提供秘密而可靠的连接。该协议由两层组成,底层是建立在可靠的传输协议(例如:TCP)上的是SSL的记录层,用来封装高层的协议。SSL握手协议准许服务器端与客户端在开始传输数据前,能够通过特定的加密算法相互鉴别。SSL的先进之处在于它是一个独立的应用协议,其它更高层协议能够建立在SSL协议上。

  目前大部分的Web Server及Browser大多支持SSL的资料加密传输协定。因此,可以利用这个功能,将部分具有机密性质的网页设定在加密的传输模式,如此即可避免资料在网络上传送时被其他人窃听。

  SSL是利用公开密钥的加密技术(RSA)来作为用户端与主机端在传送机密资料时的加密通讯协定。目前,大部分的Web Server及Browser都广泛使用SSL 技术。

  对消费者而言,SSL已经解决了大部分的问题。但是,对电子商务而言问题并没有完全解决,因为SSL只做能到资料保密,厂商无法确定是谁填下了这份资料,即使这一点做到了,还有和银行清算的问题。

  SET(Secure Electronic Transaction)

  SET是IBM、信用卡国际组织(VISA/MasterCard)以及相关厂商针对网络电子交易共同制定的安全协议,它运用了RSA安全的公钥加密技术,具有资料保密性、资料完整性、资料来源可辨识性及不可否认性,是用来保护消费者在Internet持卡付款交易安全中的标准。SET 1.0版于1997年6月正式问世。现在,SET已成为国际上所公认的在Internet电子商业交易中的安全标准。

  SET协议用在安全电子银行卡的支付系统中,使用客户端的浏览器,应用于从商业站点到商业银行中。网上银行使用已经存在的程序和设备通过确认信用卡,清算客户银行户头完成交易。SET协议则通过隐藏信用卡号来保证整个支付过程的安全。所以,SET必须保证信用卡持有者与银行在现存系统和网络上,能够保持持续的联系。SET协议为在不同的系统中使用信用卡创建了一套完整的解决办法。可靠的身份验证使SET成为一个非常好的在线支付系统。它使交易中每个合法参与者能够拥有一个合理的身份,而对持卡者的身份验证是由银行来进行的。当然这其中还包括其它服务,比如:身份认证、客户服务等。这是建立另外一个可靠的用户连接的方法。同时可以方便在发生纠纷时进行仲裁。

  SET与SSL都是做消费者的认证工作的,也就是说不仅全球数据网购物站需要在认证单位进行认证,消费者也必须从认证机构获取认证。

  SET是由Electronic Wallet(电子钱包)、Merchant Server(商店端服务机)、Payment Gateway(付款转接站)和Certification Authority(认证中心)组成的,它们构成了Internet 上符合SET标准的信用卡授权交易。

  一般来说,在开放式网络上进行金融交易以SSL及SET交易协定为主,其中又以 SET被国际公认为最安全的。有鉴于此,VISA/MASTER在1997年6月提出了名为电子交易(SET:Secure Electronic Transaction)的网络交易安全规格,这个规格基本上也是利用与SSL同样的大数值编码技术,来保证资料保密与使用者认证的工作。

  目前信用卡的安全交易标准SET仍在进行前期建设。在该系统尚未正式运作前,消费者在网络上利用信用卡进行购物时,仍须承担信用卡资料被盗用的风险。

  敏感性资料在传递过程中被窃听,交易资料在传递过程中被篡改,交易的双方身份被假冒,完全相同的订单重复送出,这些问题即使对于目前SET安全交易标准来说仍旧有一定困难。利用WWW给用户提供机密性的资料时更多的会使用User Profile、SSL或CA,以避免资料在网络上传送时被其他人窃听。

  PGP(Pretty Good Privacy)

  目前,还有一种非常好的连接网络与桌面的安全方法,PGP(Pretty Good Privacy)。

  PGP是一个公钥加密程序,与以前的加密方法不同的是PGP公钥加密的信息只能用私钥解密。在传统的加密方法中,通常一个密钥既能加密也能解密。那么在开始传输数据前,如何通过一个不安全的信道传输密钥呢?使用PGP公钥加密法,你可以广泛传播公钥,同时安全地保存好私钥。由于只有你可拥有私钥,所以,任何人都可以用你的公钥加密写给你的信息,而不用担心信息被窃听。

  使用PGP的另一个好处是可以在文档中使用数字签名。一个使用私钥加密的密钥只能用公钥解密。这样,如果人们阅读用你的公钥解密后的文件,他们就会确定只有你才能写出这个文件。

  PGP是一个软件加密程序,用户可以使用它在不安全的通信链路上创建安全的消息和通信。PGP协议已经成为公钥加密技术和全球范围消息安全性的事实标准。因为所有人都能看到它的源代码,从而查找出故障和安全性漏洞,所有的故障和漏洞都在发现后被改正了。

    * 在支持position:fixed的浏览器上使用position:fixed,这样当拖动共同条的时候弹窗位置是固定的。
    * 优化了IE6下onscroll 事件绑定的函数

还需改进的地方(过段事件等项目应用的时候会修改):

    * 30秒后自动关闭
    * 方便的插入弹出内容

 

JavaScript代码
  1. var RBMessage={      
  2.     boxW:200,      
  3.     boxH:101,      
  4.     init:function(){      
  5.         var that = this;      
  6.         this.createBox();      
  7.         document.getElementById("msg_close").onclick = function() {      
  8.             that.BoxWin.style.display="none";      
  9.         }      
  10.     },      
  11.     bind: function() { //绑定窗口滚动条与大小变化事件      
  12.         var that = this,      
  13.         st, rt;      
  14.         window.onscroll = function() {      
  15.             if( !!window.ActiveXObject &amp;&amp; !window.XMLHttpRequest ){      
  16.                 clearTimeout(st);      
  17.                 clearTimeout(that.timer2);      
  18.                 that.setOpacity(0);      
  19.                 st = setTimeout(function() {      
  20.                     that.BoxWin.style.top = that.getY().top;      
  21.                     that.show();      
  22.                 },500);      
  23.             }      
  24.         };      
  25.         window.onresize = function(){      
  26.             if (!!window.ActiveXObject &amp;&amp; !window.XMLHttpRequest) {      
  27.                 clearTimeout(rt);      
  28.                 rt = setTimeout(function(){      
  29.                     that.BoxWin.style.top = that.getY().top      
  30.                 }, 100);      
  31.             }      
  32.         }      
  33.     },      
  34.     show: function() { //渐显      
  35.         clearInterval(this.timer2);      
  36.         var that = this,      
  37.         fx = this.fx(0, 100, 0.1),      
  38.         t = 0;      
  39.         this.timer2 = setInterval(function() {      
  40.             t = fx();      
  41.             that.setOpacity(t[0]);      
  42.             if (t[1] == 0) {      
  43.                 clearInterval(that.timer2)      
  44.             }      
  45.         },      
  46.         10);      
  47.     },      
  48.     fx: function(a, b, c) { //缓冲计算      
  49.         var cMath = Math[(a – b) > 0 ? "floor""ceil"],      
  50.         c = c || 0.1;      
  51.         return function() {      
  52.             return [a += cMath((b – a) * c), a – b]      
  53.         }      
  54.     },      
  55.     setOpacity: function(x) { //设置透明度      
  56.         var v = x >= 100 ? ‘‘‘Alpha(opacity=‘ + x + ‘)‘;      
  57.         this.BoxWin.style.visibility = x < = 0 ? ‘hidden‘‘visible‘//IE有绝对或相对定位内容不随父透明度变化的bug      
  58.         this.BoxWin.style.filter = v;      
  59.         this.BoxWin.style.opacity = x / 100;      
  60.     },      
  61.     getY: function() { //计算移动坐标      
  62.         var d = document,      
  63.         b = document.body,      
  64.         e = document.documentElement;      
  65.         var s = Math.max(b.scrollTop, e.scrollTop);      
  66.         var h = /BackCompat/i.test(document.compatMode) ? b.clientHeight: e.clientHeight;      
  67.         var h2 = this.BoxWin.offsetHeight;      
  68.         return {      
  69.             foot: s + h + h2 + 2 + ‘px‘,      
  70.             top: s + h – h2 – 2 + ‘px‘     
  71.         }      
  72.     },      
  73.     moveTo: function(y) { //移动动画      
  74.         clearInterval(this.timer);      
  75.         var that = this;      
  76.         var moveTopNum=-that.boxH;      
  77.         this.timer = setInterval(function() {      
  78.             moveTopNum+=5;      
  79.             that.BoxWin.style.bottom =  moveTopNum +‘px‘;      
  80.             if (moveTopNum >= 0) {      
  81.                 clearInterval(that.timer);      
  82.                 that.bind();      
  83.             }      
  84.         },50);      
  85.         return this;      
  86.     },      
  87.     createBox:function(){      
  88.         this.BoxWin=document.createElement(‘div‘);      
  89.         this.BoxWin.style.width = this.boxW+"px";      
  90.         this.BoxWin.style.height =  this.boxH+"px";      
  91.         this.BoxWin.style.bottom = – this.boxH+"px";      
  92.         this.BoxWin.id = "msg_win";      
  93.         this.BoxWin.innerHTML = ‘<div class="icos"><a href="javascript:void 0" title="关闭" id="msg_close">X</a></div><div id="msg_title">温馨提示(标题)</div><div id="msg_content"></div>‘;      
  94.         document.body.appendChild(this.BoxWin);      
  95.         var that = this;      
  96.         setTimeout(function() { //初始化最先位置      
  97.             that.BoxWin.style.display = ‘block‘;      
  98.             that.moveTo();      
  99.         },1000);      
  100.         return this;      
  101.     }      
  102. };      
  103. RBMessage.init();    

手工法:

Click Start, click Run, type regedit, and then click OK.

  1. In the left pane, locate and then click the following registry subkey:
    HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsNTCurrent VersionWPAEvents
  2. In the right pane, right-click OOBETimer, and then click Modify.
  3. Change at least one digit of the OOBETimer value to deactivate Windows.
  4. Click Start, click Run, type the following command, and then click OK:
    %systemroot%system32oobemsoobe.exe /a
  5. Click Yes, I want to telephone a customer service representative to activate Windows, and then click Next.
  6. Click Change Product key, type the new product key in the New key boxes, and then click Update. 



    Note If the previous Activation Wizard screen appears again, click Remind me later, and then restart the computer.
  7. Repeat steps 6 and 7 to verify that Windows is started. Click OK when you receive the following message:
    Windows is already activated. Click OK to exit.
  8. Install any Windows service packs that you want to install. 



    Note If you cannot restart Windows after you install a service pack, press F8 when you restart the computer, click Last Known Good Configuration, and then repeat this procedure.

 

脚本法:

ChangeVLKeySP1.vbs

ASP/Visual Basic代码
  1. ‘    
  2. ‘ WMI Script – ChangeVLKey.vbs   
  3.   
  4. ‘ This script changes the product key on the computer.   
  5.   
  6. ‘***************************************************************************   
  7.   
  8. ON ERROR RESUME NEXT   
  9.   
  10.   
  11. if Wscript.arguments.count<1 then   
  12.    Wscript.echo "Script can‘t run without VolumeProductKey argument"  
  13.    Wscript.echo "Correct usage: Cscript ChangeVLKey.vbs ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX"  
  14.    Wscript.quit   
  15. end if   
  16.   
  17. Dim VOL_PROD_KEY   
  18. VOL_PROD_KEY = Wscript.arguments.Item(0)   
  19. VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-",""‘remove hyphens if any   
  20.   
  21. for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")   
  22.   
  23.    result = Obj.SetProductKey (VOL_PROD_KEY)   
  24.   
  25.    if err <> 0 then   
  26.       WScript.Echo Err.Description, "0x" & Hex(Err.Number)   
  27.       Err.Clear   
  28.    end if   
  29.   
  30. Next  

 

 

 

ChangeVLKey2600.vbs

 

ASP/Visual Basic代码
  1. ‘    
  2. ‘ WMI Script – ChangeVLKey.vbs   
  3.   
  4. ‘ This script changes the product key on the computer.   
  5.   
  6. ‘***************************************************************************   
  7.   
  8. ON ERROR RESUME NEXT   
  9.   
  10. if Wscript.arguments.count<1 then   
  11.    Wscript.echo "Script can‘t run without VolumeProductKey argument"  
  12.    Wscript.echo "Correct usage: Cscript ChangeVLKey.vbs ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX"  
  13.    Wscript.quit   
  14. end if   
  15.   
  16. Dim VOL_PROD_KEY   
  17. VOL_PROD_KEY = Wscript.arguments.Item(0)   
  18. VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-",""‘remove hyphens if any   
  19. Dim WshShell   
  20. Set WshShell = WScript.CreateObject("WScript.Shell")   
  21. WshShell.RegDelete "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWPAEventsOOBETimer" ‘delete OOBETimer registry value   
  22. for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")   
  23.   
  24.    result = Obj.SetProductKey (VOL_PROD_KEY)   
  25.   
  26.    if err <> 0 then   
  27.       WScript.Echo Err.Description, "0x" & Hex(Err.Number)   
  28.       Err.Clear   
  29.    end if   
  30.   
  31. Next   

听说植物园的枫叶红了好久了,一直都没时间去。

上礼拜天刚好有了点时间,于是就去了却了这个心愿。

我们去的时候也比较晚了,进园的时候都快下午4点了。还是人山人海…

这次我还带了我的航拍利器GAUI 330X-S,大家可以欣赏一下我的航拍视频了,呵呵。

好了,废话少说。上图上视频吧!

img_0175.jpg

img_0172.jpg

img_0171.jpg

img_0158.jpg

img_0015.jpg

img_0152.jpg

 

高清版本: