`
hgfghwq15
  • 浏览: 49690 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

FlashPaper 使用经验之谈

 
阅读更多

  FlashPaper 使用经验之谈
  李志海  20101229  QQ:76855049 一、目的 我的这篇文章侧重点是如何很好的应用FlashPaper,不是告诉大家FlashPaper是什么。 二、FlashPaper介绍(从百科里面摘的) FlashPaper 是Macromedia推出的一款电子文档类工具,通过使用本程序,你可以将需要的文档通过简单的设置转换为SWF格式的Flash动画,原文档的排版样式和字体显示不会受到影响,这样做的好处是不论对方的平台和语言版本是什么,都可以自由的观看你所制作的电子文档动画,并可以进行自由的放大,缩小和打印,翻页等操作,对文档的传播非常有好处,而且由于Flash动画的普及性和强大的可调节性,可以让你制作出非常漂亮的专业电子文档! 三、所需软件 l  Windows 系列操作系统
  l  FlashPaper2.2 绿色版就行。网上有,或者到我的csdn上下载
  l  Office 2010 建议装最新版本的,我以前装的是2007感觉不是很好。
  l  AdobeReader 最新版本 四、转化程序 转化程序是通过cmd调用的FlashPrinter.exe这个命令执行的。转化程序注意几点: l  把要转化的文件放入队列,保证程序一个一个的执行转化。 l  转化完成后让程序延迟一会,再执行下一个 主要代码如下: String tmpOutFile = outFile.getPath().concat(File.separator)                      .concat(                             inFile.getName()                                    .replaceAll("[.]{1}.*$", ".swf"));               fileInst = new File(tmpOutFile);               List commandArray = new ArrayList();               commandArray.add(defaultCommand);               commandArray.add(inFile.getPath());               commandArray.add("-o");               commandArray.add(tmpOutFile);               ProcessBuilder pbObj = new ProcessBuilder();               pbObj.command(commandArray);               Map envMap = pbObj.environment();               envMap.clear();               envMap.putAll(System.getenv());               pbObj.directory(outFile);               pbObj.redirectErrorStream(true);               boolean b = false;               Process proObj = null;               try {                   proObj = pbObj.start();                   final InputStream ins = proObj.getInputStream();                   final ByteBuffer byteBuffer = ByteBuffer.allocate(1024);                   Thread th = new Thread() {                      publicvoid run() {                          ReadableByteChannel rbcObj = Channels                                 .newChannel(ins);                          try {                             while (rbcObj.read(byteBuffer) != -1) {                                 byteBuffer.flip();                                 logger.info(java.nio.charset.Charset                                        .defaultCharset()                                        .decode(byteBuffer));                                 byteBuffer.clear();                             }                          } catch (IOException e) {                             logger.error(e);                          }                      }                   };                   th.setDaemon(true);                   th.start();                   try {                      proObj.waitFor();                      b = true;                   } catch (InterruptedException e) {                      logger.error(e);                   } // 休息                   Thread.sleep(30 * 1000);               } catch (Exception e) {                   logger.error("执行出错了");
  logger.error(e);
  } finally {
  if (proObj != null) {
  proObj.destroy();
  }                   ManagerThread.getInstance().doNext(b, resFileConvert);               } 注意:别人有写好的FlashPaper4Java可以参考一下。这个网上也有,或到我的csdn上下载。 五、进程实护 用FlashPaper做转化一定要注意进程实护问题。因为FlashPaper用的是打印原理。同一台机器,同一时间只能有一个进程在执行。其它的只能是等待。另外在打印的时候可能会出现"卡纸"问题,需要程序去实时监控。
  我的进程实护程序是用c#写的,每隔一段时间去看进程运行时间是不是超过了你设定的时间,如果超过了,就杀掉。主要代码如下:
  foreach (Process print inProcess.GetProcessesByName("FlashPrinter"))
  {
  if (((TimeSpan)(DateTime.Now - print.StartTime)).TotalMinutes > 3)
  {
  print.Kill();
  }
  }
  进程实护程序用c/s程序写。写完后把它加到启动项里,每次重启机就不用关了。 六、Flex加载FlashPaper 上面是说如何把文件转化为 swf的。下面我们来说如何把文件展现出来。我目前用的是方法一。
  方法一:SWFLoader加载,加载完后改变它的大小。
  如果直接用SWFLoader加载的话,加载出的界面很小,不会按父容器的大小去自动变化。所以要给它加一个监听器,加载完后再去改变它的大小。如下:
  
  Private function init():void{
  swfLoader.addEventListener(Event.INIT, initHandle);   
  }
  private function initHandle(e : Event) : void {   
  swfLoader.getChildAt(0).width=pWidth;
  swfLoader.getChildAt(0).height=pHeight;
  }
  优点:打开多个浏览器都不会影响其正常显示。与方法二的区别
  缺点:文件会有点变形。
  方法一:SWFLoader加载,通过LocationConnction与FlashPaper进行通信,调用其内部方法,改变其大小。
  优点:不能同时打开多个文件,因为LocationConnction通道已经被第一占用了。
  缺点:文件不会变形。 七、破解FlashPaper的自带的商标 FlashPaper2.2\Interface文件夹下有DefaultViewer2.swf文件,把其替换成自己的皮肤就可以。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics