用Flex调用SWF查看PDF
2009-12-05 01:53
337 查看
有时候一些资料只能给别人看,如可打印的文档如DOC,PDF,但不能让其他无权限的人另存或者打印,特别是web版的文件管理类的系统,总会考虑到这个问题。当用IE直接打开pdf的时候,尽管可以疲敝IE的另存为,但是点击PDF文件的时候,再按F8的时候,PDF的阅读器如(adobereader)会显示ToolsBar,所以直接打开pdf貌似行不同(目前所知道的)。当时一听到这个需求立马就想用swing(因为我只懂一些swing),把pdf转换成图片,然后每一页对应一张图片显示,但是马上给否定了,第一转换出来的图片不清晰(我目前所了解的)而且这图片放大缩小的效果也不好看,第二不想花时间和别人去争论swing慢的问题。
刚巧进一家新公司没什么任务,在看flex,就想能不能把PDF转换成swf呢?好,马上google,结果还真找到有这么好的东东SWFTOOLS,这款东西是老外用c写的,还是开源的,够强!它有很多功能包括PDF2SWF,SWFCombine,SWFStrings,SWFDump,JPEG2SWF,PNG2SWF,GIF2SWF,WAV2SWF,AVI2SWF,Font2SWF。在这里我们只需要PDF2SWF,关于PDF2SWF的命令大家可以查看他的帮助documentation,E文不好的可以看《如何將PDF轉換成SWF》,这个东西是把pdf的每一页转换成swf的每一帧,这样的话又可以很好的解决翻页功能。安装好就可以用来测试了。然后用cmd进入到安装的目录下,随便找一份pdf进行测试,如下:
![](http://www.blogjava.net/images/blogjava_net/kissjava/pdf2swf.png)
图片中“-o”的那个参数就是指点生成的swf的名称和路径,这样就能转成swf,而且非常清晰和pdf无异,简单吧~
整合在java里面也简单,只要一个用Runtime.getRuntime().exec()就行,如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package kissjava.pdf;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*@author kissjava;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.io.IOException;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class PDFToSWF {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) throws IOException{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Process process = Runtime.getRuntime().exec("d://Program Files//SWFTools//pdf2swf.exe -o /"e://test.swf/" -t /"e://flexBinding.pdf/"");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("sucess!!!");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
这样等生成了swf,就发个通知告诉客户端可以调用这个swf。
但是当写好mxml后却bug一大堆,下面是flex程序初始化的一个函数:
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
private function init():void{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
var mc:MovieClip = swfload.content as MovieClip;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
mc.gotoAndStop(1);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
var myContextMenu : ContextMenu = new ContextMenu();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
myContextMenu.hideBuiltInItems();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.contextMenu = myContextMenu;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//swfload.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//swfload.addEventListener(MouseEvent.MOUSE_UP,mouseUp);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
却发现mc为null,怎么可能呢?用别人用flash写的swf,明明是可以通讯的,debug进去,发现swfload.content 是AVM1Movie,这东西是个老东西是as2的,他和MovieClip是不来电的,而且用反编译的查看这个生成的swf,它显示的版本居然是flash6,天啊,这么老的版本,要想和flash9通讯很困难,找了很多资料,都说很复杂。但是这款最新下载的工具更新的时间明明是2008-09-22,没道理不支持flash9啊,可是它的帮助文档却没设置flash版本这方面的参数说明,苦闷了很久,抱着试试的态度去看了下他的源码(我很怕C哈),结果里面果然有蹊跷,居然有指定flash版本的参数,它为什么不在文档里说明呢??
把上面生成swf语句改成如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Process process = Runtime.getRuntime().exec("f://Program Files//SWFTools//pdf2swf.exe -o /"e://test.swf/" -s flashversion=9 /"e://flexBinding.pdf/"");
再运行flex,ok,跑的爽。测试效果如下:
![](http://www.blogjava.net/images/blogjava_net/kissjava/flexpdf.png)
原文:http://www.blogjava.net/kissjava/archive/2008/09/26/231383.html
刚巧进一家新公司没什么任务,在看flex,就想能不能把PDF转换成swf呢?好,马上google,结果还真找到有这么好的东东SWFTOOLS,这款东西是老外用c写的,还是开源的,够强!它有很多功能包括PDF2SWF,SWFCombine,SWFStrings,SWFDump,JPEG2SWF,PNG2SWF,GIF2SWF,WAV2SWF,AVI2SWF,Font2SWF。在这里我们只需要PDF2SWF,关于PDF2SWF的命令大家可以查看他的帮助documentation,E文不好的可以看《如何將PDF轉換成SWF》,这个东西是把pdf的每一页转换成swf的每一帧,这样的话又可以很好的解决翻页功能。安装好就可以用来测试了。然后用cmd进入到安装的目录下,随便找一份pdf进行测试,如下:
![](http://www.blogjava.net/images/blogjava_net/kissjava/pdf2swf.png)
图片中“-o”的那个参数就是指点生成的swf的名称和路径,这样就能转成swf,而且非常清晰和pdf无异,简单吧~
整合在java里面也简单,只要一个用Runtime.getRuntime().exec()就行,如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
package kissjava.pdf;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
*@author kissjava;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.io.IOException;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class PDFToSWF {
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args) throws IOException{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
Process process = Runtime.getRuntime().exec("d://Program Files//SWFTools//pdf2swf.exe -o /"e://test.swf/" -t /"e://flexBinding.pdf/"");
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
System.out.println("sucess!!!");
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
这样等生成了swf,就发个通知告诉客户端可以调用这个swf。
但是当写好mxml后却bug一大堆,下面是flex程序初始化的一个函数:
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
private function init():void{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
var mc:MovieClip = swfload.content as MovieClip;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
mc.gotoAndStop(1);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
var myContextMenu : ContextMenu = new ContextMenu();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
myContextMenu.hideBuiltInItems();
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
this.contextMenu = myContextMenu;
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//swfload.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown);
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
//swfload.addEventListener(MouseEvent.MOUSE_UP,mouseUp);
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
却发现mc为null,怎么可能呢?用别人用flash写的swf,明明是可以通讯的,debug进去,发现swfload.content 是AVM1Movie,这东西是个老东西是as2的,他和MovieClip是不来电的,而且用反编译的查看这个生成的swf,它显示的版本居然是flash6,天啊,这么老的版本,要想和flash9通讯很困难,找了很多资料,都说很复杂。但是这款最新下载的工具更新的时间明明是2008-09-22,没道理不支持flash9啊,可是它的帮助文档却没设置flash版本这方面的参数说明,苦闷了很久,抱着试试的态度去看了下他的源码(我很怕C哈),结果里面果然有蹊跷,居然有指定flash版本的参数,它为什么不在文档里说明呢??
把上面生成swf语句改成如下:
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Process process = Runtime.getRuntime().exec("f://Program Files//SWFTools//pdf2swf.exe -o /"e://test.swf/" -s flashversion=9 /"e://flexBinding.pdf/"");
再运行flex,ok,跑的爽。测试效果如下:
![](http://www.blogjava.net/images/blogjava_net/kissjava/flexpdf.png)
原文:http://www.blogjava.net/kissjava/archive/2008/09/26/231383.html
相关文章推荐
- 用Flex调用SWF查看PDF
- 用Flex调用SWF查看PDF
- 用Flex调用SWF查看PDF
- FlexPaper+SWFTools 实现仿百度文库,在线查看PDF文档
- Flex调用swf内方法
- Flex调用swf内方法
- PDF在线阅读开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper] 使用JODConverter将office文档转换为pdf
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](七) 之 使用iText将jpg、jpeg、png转换为pdf
- Flex调用swf内方法
- 在线显示PDF文档:基于SWFTools + FlexPaper
- jsp嵌入flex swf 和flex调用js方法
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper] 转换pdf的同时,进一步转为swf
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf
- 调用swftools将中文PDF转化为SWF
- QT和flex swf进行相互调用和交互
- 发布一款新开发的阅读器(flex),支持doc,jpeg,pdf,swf,ppt,excel等
- flex打印pdf(调用本地打印机)
- flex实现百度库文浏览文档使用word文档转pdf然后再用pdf转swf最后flex页面使用flexpaper显示文库数据
- Flex中利用AMFPHP开发包通过PHP调用轻松生成输出PDF文档