有才华的人,别忘记给滋润你的那块土壤施肥

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 5 文章 :: 147 评论 :: 0 Trackbacks
          有时候一些资料只能给别人看,如可打印的文档如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进行测试,如下:
图片中“-o”的那个参数就是指点生成的swf的名称和路径,这样就能转成swf,而且非常清晰和pdf无异,简单吧~

         整合在java里面也简单,只要一个用Runtime.getRuntime().exec()就行,如下:
package kissjava.pdf;
/**
*
@author kissjava;
*/


import java.io.IOException;

public class PDFToSWF {
    
public static void main(String[] args) throws IOException{
        Process process 
= Runtime.getRuntime().exec("d:\\Program Files\\SWFTools\\pdf2swf.exe -o \"e:\\test.swf\"  -t \"e:\\flexBinding.pdf\""); 
        System.out.println(
"sucess!!!");
    }

}

这样等生成了swf,就发个通知告诉客户端可以调用这个swf。
但是当写好mxml后却bug一大堆,下面是flex程序初始化的一个函数:
private function init():void{
                
var mc:MovieClip = swfload.content as MovieClip;
                mc.gotoAndStop(
1);
                
var myContextMenu : ContextMenu = new ContextMenu();
                  myContextMenu.hideBuiltInItems();
                  
this.contextMenu = myContextMenu;                
                
//swfload.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown);
                //swfload.addEventListener(MouseEvent.MOUSE_UP,mouseUp);
            }

却发现mc为null,怎么可能呢?用别人用flash写的swf,明明是可以通讯的,debug进去,发现swfload.content 是AVM1Movie,这东西是个老东西是as2的,他和MovieClip是不来电的,而且用反编译的查看这个生成的swf,它显示的版本居然是flash6,天啊,这么老的版本,要想和flash9通讯很困难,找了很多资料,都说很复杂。但是这款最新下载的工具更新的时间明明是2008-09-22,没道理不支持flash9啊,可是它的帮助文档却没设置flash版本这方面的参数说明,苦闷了很久,抱着试试的态度去看了下他的源码(我很怕C哈),结果里面果然有蹊跷,居然有指定flash版本的参数,它为什么不在文档里说明呢??

把上面生成swf语句改成如下:
Process process = Runtime.getRuntime().exec("f:\\Program Files\\SWFTools\\pdf2swf.exe -o \"e:\\test.swf\" -s flashversion=9 \"e:\\flexBinding.pdf\""); 

再运行flex,ok,跑的爽。测试效果如下:

posted on 2008-09-26 22:17 kissjava 阅读(12524) 评论(50)  编辑  收藏 所属分类: Flex

评论

# re: 用Flex调用SWF查看PDF 2008-09-27 12:23
真强。  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2008-09-27 23:16 枯宽
刚上网发现Macromedia有个把doc转成swf的,太强了
下面是个例子:
http://www.nihg.org/blogview.asp?logID=297  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2008-10-17 17:07 next_dream
请教一下,我想知道为什么我像你这样写以后不能控制swf停止和第几帧跳转呢?他总是在不停的循环播放我导入的fswf文件。能不能把你的这个抓图的flex代码给我一份,谢谢。小弟刚刚研究还请你多多指教。

next_dream@126.com 我的邮箱  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2008-10-17 17:24 next_dream
我的flex是这么写


<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
<mx:Script>
<![CDATA[
private function initApp():void{
var mc:MovieClip = swfload.content as MovieClip;
mc.gotoAndStop(1);
var myContextMenu : ContextMenu = new ContextMenu();
myContextMenu.hideBuiltInItems();
this.contextMenu = myContextMenu;
}
]]>
</mx:Script>

<mx:Panel >
<mx:SWFLoader id="swfload" source="@Embed('pdf/zhu.swf')" />
</mx:Panel>

</mx:WindowedApplication>  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2008-10-24 10:44 枯宽
@next_dream
首先你得确定你的这个swf是什么类型的,用debug的形式查看swfload.content是AVM1Movie 还是什么?
如果swfload.content 根本就拿不到为null
那么<mx:SWFLoader id="swfload" source="@Embed('pdf/zhu.swf')" />
=====》试试
<mx:SWFLoader id="swfload" source="@Embed('pdf/zhu.swf')"complete="callLater(callLater, [swfloadComplete,[event]]);" />
swfloadComplete为:
private function swfloadComplete(event:Event):void{
mc.gotoAndStop(1);//设置当前页为第一页
}  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2008-12-04 10:23 fly
你好,能不能发个完整的代码呢?谢谢, 发到我邮箱也行,luofeng113-113@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2008-12-09 10:25 jking
最近也在研究flex与java的整合,能否发个完整的代码到我的邮箱里,谢谢了
xieminxian@yeah.net  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2008-12-09 12:05 tulip
我最近在学习flex,能把代码也发给我一份吗?我的邮箱是linyujade@163.com.谢谢了。  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2008-12-21 14:47 waiting
大侠,我也正在学习flex,有幸拜读了你的文章,能不能也给我一份代码研究一下,谢谢! waitany@163.com.  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2009-02-12 16:31 Tony
我最近在学习flex,能把代码也发给我一份吗?我的邮箱是ibm-online@qq.com谢谢了  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-03-06 11:58 qsecofr
我最近在学习flex,能把代码也发给我一份吗?我的邮箱是qsecofr2000@163.com谢谢了  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2009-04-24 17:23 xiaogang
作者能把源码发给我吗
我的邮箱是vtaminn@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-05-05 09:50 CTK
最近在学习flex,看了你的文章,受益颇多,能否把代码也发给我一份学习学习?我的邮箱是luoctk@163.com谢谢了  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2009-05-19 17:30 Terry
作者能把源码发给我一份吗
我的邮箱是TarzanTerry@yahoo.com.hk

谢谢了  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-07-13 10:28 8772
如果后台是使用c#能有办法吗?  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-07-14 17:17 jamin
你好,能发个源码过来学习一下吗?
我的邮件是:jamin_381@hotmail.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-07-16 08:52 枯宽
@8772
肯定可以的~不过没试过  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-07-29 19:29 tsubasa
能把源码发给我一份吗 3Q

邮箱是tsubasa_Wing10588@hotmail.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-08-09 13:00 水火
能把源码发给我吗 谢谢
email: delphi-li@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-08-21 15:41 leieli
能把源码发给我吗?谢谢啦!!!
malei1986@139.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-08-25 17:00 崇拜楼主
我也需要啊  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2009-09-21 17:12 lib
可以也给我发一份代码吗?谢谢了libo_591@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-10-09 17:07 manager
在flex web应用中也能使用你说的这种方法吗?
能否提供完整源码,不胜感激!  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-10-22 11:13 p27135
转成swf一样也能下载呀  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-11-04 20:58 Lingchen Bu
谢谢你的文章。请问你这篇文章设计软件的版本是多少?
我当前的版本swftools0.90 Flex 3.2

我出现的问题是。flex不能加载生成的swf。编译错误。当我换另外一个通过flash生成的swf事能够正常加载。所以我怀疑pdf2swf生成的swf里面是不是缺少什么信息,flex无法加载。

再次谢谢!  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-11-05 09:03 kissjava
@Lingchen Bu
跟踪进去看看swfload.content 是不是AVM1Movie?是的话,那么你就要按文中所说的,指定flashversion=9了。

一般就没其他什么问题了。  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-11-05 09:43 Lingchen Bu
@kissjava
谢谢你的回复。
我建立flex porject的时候能够正常编译。显示正常。
但是在使用AIR project的时,编译就编译不过去。报的错误是
"Unable to create source PDFViewer__embed_mxml_pdf_rmsd_swf_308507626. PDFViewer.mxml"
当我换做其他由Adobe Flash生成的swf的时候编译能够正常通过。
  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-11-07 15:49 xinxin
给小弟 发一份 谢谢了 xinxin2005100@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-12-16 15:51 bianjiang
谢谢楼主,我想学习一下,给我发一份 谢谢拉 bianjiang09@126.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2009-12-17 09:16 grassking
我也想要一份wxc0564335@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2010-02-23 13:20 bnmbj
楼主:给小弟个代码如何?
我正在摸索中......
邮箱:zhchongyao@126.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2010-02-25 22:34 xiaofei
您好,能否把源码发一份给我呢?谢谢.
feiling2007.love@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2010-03-01 17:28 JTee
给小弟 发一份 谢谢了 sianke731@126.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2010-03-01 22:08 小飞
您好,能否把源码给我一份呢?谢谢。
feiling2007.love@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2010-03-02 17:42 Alan
播放swf只能一帧一帧播放吗?那我的下拉框作用就不大了,可以实现像看文件那样,可以下拉到下一页吗?  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2010-03-03 23:42 小飞
您好,我在转换的过程中遇到一个问题。

就是转化后的swf文件 里面的文字都比较小(也就是pdf文件里面的文字都比较小,换句话说就是pdf文件的宽度都比较小),有没有办法设置转化后的swf文件里面的Pdf 文件的宽度大小呢?谢谢。

我的邮箱是feiling2007.love@163.com
  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2010-03-04 17:43 kissjava
@小飞
swftoos的安装目录下面有个GUI程序,你运行它看看转换的效果看,如果它能正常的话,那就有途径的,这个工具对字体的确是有些麻烦,特别是亚洲字体,很久没关注这方面的啦。自个找吧,祝你好运~~~  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2010-03-14 00:33 小刘
你好,我也正在学习flex加载pdf。
我也想要一份 la5baby@yahoo.com.cn.
谢谢。  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2010-03-16 20:20 chanyujiajia
有空请发一份源代码给我,谢谢。
chanyujiajia@163.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2010-04-08 15:16 chenwenjun
大哥,小弟我跪求楼主的Flex调用SWF查看PDF的源码,有空请发一份源代码给我,谢谢。
cwj114473275@163.com   回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2010-04-24 22:21 machine
可以给我发一份这个源代码吗?谢谢。steve2008.ma@gmail.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2010-11-24 15:06 jaon
你是如何将所有帧一起显示出来的?
我的做的只能一帧一帧的去翻页不能同时显示出来,拉滚动条查看  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2010-12-07 23:08 lihw
学习下,能给我发份吗?lihaiwu2005@gmail.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2011-04-20 12:30 kingsmalltwo
正在学习 前辈能把源码发我一份吗?
kingsmalltwo@gmail.com
  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2011-06-20 16:49 guo
我现在也正在研究flex显示pdf文档,大侠能否给我一份你的完整代码,谢谢!
我的邮箱是guozhiguo86@126.com ; abcxyz86@126.com  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2011-10-25 20:01 HD Lee
高手可否给一份源代码,我正在写一个类似的view,问题很多。。。。  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2011-12-15 10:57 小弟
求大神给小弟发个完整版啊 654797076@qq.com 好人一生平安啊  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2011-12-15 11:02 小弟
如果要读的文件是在服务器中,而管理人员可以上传文件,那么如何自动将上传的文件转换成swf格式,用户端在浏览pdf文件时,并没有swf文件,是要从服务器中读取的,这部分如何进行绑定啊?逻辑上有点不清楚,求指教  回复  更多评论
  

# re: 用Flex调用SWF查看PDF[未登录] 2011-12-15 15:25 kissjava
@小弟
上传文件时就放进线程池,用SWFTOOLS做文件转换的。调用swf的时候,若没找到,就先转换,再调用。
代码没了。。。上一家公司的。  回复  更多评论
  

# re: 用Flex调用SWF查看PDF 2012-06-29 10:16 CDD
有才华的人,别忘记给滋润你的那块土壤施肥

膜拜LZ这句话  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: