`

PDF在线阅读开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)【转】

阅读更多

1、使用SaveAsPDFandXPS将office文档转换成PDF

http://www.microsoft.com/downloads/details.aspx?FamilyID=4d951911-3e7e-4ae6-b059-a2e79ed87041&displaylang=en

微软原计划让Office 2007直接支持保存为PDF格式,但引起了Adobe的不满,并被指责为垄断,最终被迫放弃,改为以插件的形式予以支持,插件大家都知道怎么回事儿,默认不装,要用你的自己找来装上。不过微软针对这件事情也做出了一个回应:发布XPS, XPS则是微软自己利用XML技术开发的新型文档格式。

  该插件支持Office 2007的8个组件,包括Word、Excel、Access、PowerPoint、InfoPath、OneNote、Publisher和Visio。安装插件后,用户即可在上述组件中将相应文档存储为PDF格式或XPS格式,还可以方便地将文档保存为PDF/XPS格式的E-mail附件。

2、下载 SWFTools

SWFTools 是一组用来处理 Flash 的 swf 文件的工具包,包括:

1. 合并工具 swfcombine
2. 抽取工具 swfextract
3. PDF/JPEG/PNG/AVI/TTF/WAV 到 SWF 的转换工具 :pdf2swf, jpeg2swf, png2swf, avi2swf, font2swf, and wav2swf|
4. 文本解析工具 swfstrings
5. SWF 解析器 swfdump
6. SWF 读写库 rfxswflib

其中把pdf转成swf的工具就是pdf2swf了。在命令行中运行pdf2swf src.pdf des.swf一般能满足需求。而命令行参数可以通过pdf2swf -f得到:

-h , –help Print short help message and exit 打印帮助信息
-V , –version Print version info and exit 打印版本号
-o , –output file.swf Direct output to file.swf. If file.swf contains ‘13568621′ (file13568630.swf), then each page指定输出的swf文件名
-p , –pages range Convert only pages in range with range e.g. 1-20
or 1,4,6,9-11 or
指定转换的页面范围,使用的页码描述方法与打印机打印文件时候的选页一样

-P , –password password Use password for deciphering the pdf.指定打开pdf的密码
-v , –verbose Be verbose. Use more than one -v for greater effect.转换时输出详细的内容
-z , –zlib Use Flash 6 (MX) zlib compression.使用Flash 6的zlib压缩机制
-i , –ignore Allows pdf2swf to change the draw order of the pdf. This may make the generated允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
-j , –jpegquality quality Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)设置转换其中的jpeg图片的质量,从0到100,默认值是85。
-s , –set param=value Set a SWF encoder specific parameter. See pdf2swf -s help for more information. 设置SWF转码时候的参数,具体参数可以用pdf2swf -s help获取
-w , –samewindow When converting pdf hyperlinks, don’t make the links open a new window. 设置转换后的swf打开原pdf中的连接时使用相同的窗口
-t , –stop Insert a stop() command in each page. 在每页结尾添加一个stop()命令
-T , –flashversion num Set Flash Version in the SWF header to num. 设置SWF所使用的flash版本号
-F , –fontdir directory Add directory to the font search path. 指定字体文件所在路径
-b , –defaultviewer Link a standard viewer to the swf file. 指定默认的swf导航文件,用来翻页、放大缩小等等
-l , –defaultloader Link a standard preloader to the swf file which will be displayed while the main swf is loading. 指定默认的swf加载文件,用来显示加载进程效果
-B , –viewer filename Link viewer filename to the swf file. 指定swf导航文件,作用同-b
-L , –preloader filename Link preloader filename to the swf file. 指定swf加载文件,作用同-l
-q , –quiet Suppress normal messages. Use -qq to suppress warnings, also. 不打印普通信息,用-qq就不打印警告信息。
-S , –shapes Don’t use SWF Fonts, but store everything as shape. 不使用字体,所有都转为形状。
-f , –fonts Store full fonts in SWF. (Don’t reduce to used characters). 在swf中保存全部字体。
-G , –flatten Remove as many clip layers from file as possible. 在文件中尽量去除影片层,合并它们
-I , –info Don’t do actual conversion, just display a list of all pages in the PDF. 不做实际转换,仅显示PDF的信息。
-Q , –maxtime n Abort conversion after n seconds. Only available on Unix. 如果运行时间超时则退出。

3、java程序,实现上传PDF自动转换成SWF文件

01 //ajax方法,先解密传过来的文件名,根据判断生成SWF文件后跳转至FLASH页面
02   
03 if (ajaxAction.equals("exeflash"))   //把PDF成SWF
04         {
05             String fn = DecodeUtil.Decrypt(StringUtil.null2String(request.getParameter("fn")).trim()).toLowerCase();
06             try {
07                 if (!"".equals(fn) && fn.indexOf("/") > -1 && fn.indexOf(".pdf") > -1) {
08                     Map webfileupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get("webfile");
09                     String webfilepath = StringUtil.null2String(webfileupmap.get("path")).replace("\\", "\\\\");
10                     fn = fn.substring(fn.lastIndexOf("/") + 1);//aa.pdf
11                     webfilepath = webfilepath + fn;
12                     File f = new File(webfilepath);
13                     if (!f.exists()) {
14                         return "error";
15                         //如果PDF文件不存在则退出
16                     }
17                     Map webupmap = (Map) Globals.SYS_UPLOAD_CONFIG.get("web");
18                     String webpath = StringUtil.null2String(webupmap.get("path")).replace("\\", "\\\\");
19                     String urlpath = StringUtil.null2String(webupmap.get("urlpath"));
20                     String wname = fn.substring(0, fn.indexOf(".")) + ".swf";
21                     webpath = webpath + wname;
22                     String wurl = urlpath + wname;
23                     boolean issc = false;
24                     File f2 = new File(webpath);
25                     if (!f2.exists()) {
26                         issc = true;
27                         //如果文件不存在则生成
28                     }
29                     if (issc) {
30                         String cmd = "C:\\SWFTools\\pdf2swf " + webfilepath + " -o " + webpath + " -T 9";
31                         if (StringUtil.executeCmdFlash(cmd) == false) {
32                             return "error";
33                         }
34                         System.out.println("cmd::::::" + cmd);
35                     }
36   
37                     File f1 = new File(webpath);
38                     if (f1.exists()) {
39                         ajaxstr = DecodeUtil.Encrypt(wurl);
40                     }
41   
42                 } else {
43                     return "error";
44                 }
45             } catch (Exception e) {
46                 Globals.Logger("发生错误:" + e, 2);
47             }
48   
49         }

注意:

String cmd = “C:\\SWFTools\\pdf2swf ” + webfilepath + ” -o ” + webpath + ” -T 9″;

加 “-T 9” 参数,设置输出版本为flash9,解决PDF文件只有一页,生成的swf不能播放的问题。

另外,若PDF内表格元素过多,在转换时会抛出一堆异常错误。似乎还没有好的解决办法?

01 //java调用cmd命令行方法
02   
03 /**
04      * 运行可执行文件
05      *
06      * @param cmd
07      * @return String
08      */
09     public static synchronized boolean executeCmdFlash(String cmd) {
10   
11         try {
12             final Process process = Runtime.getRuntime().exec(cmd);
13             Runtime.getRuntime().addShutdownHook(new Thread() {
14                 public void run() {
15                     process.destroy();
16                 }
17             });
18             InputStreamReader inputstreamreader = new InputStreamReader(process.getInputStream());
19             char c = (char) inputstreamreader.read();
20             if (c != '\uFFFF')
21                 stdout.append(c);
22             while (c != '\uFFFF') {
23                 if (!inputstreamreader.ready()) {
24                     System.out.println(stdout);
25                     try {
26                         process.exitValue();
27                         break;
28                     }
29                     catch (IllegalThreadStateException _ex) {
30                         try {
31                             Thread.sleep(100L);
32                         }
33                         catch (InterruptedException _ex2) {
34                         }
35                     }
36                 } else {
37                     c = (char) inputstreamreader.read();
38                     stdout.append(c);
39                 }
40             }
41             try {
42                 inputstreamreader.close();
43             }
44             catch (IOException ioexception2) {
45                 System.err.println("RunCmd : Error closing InputStream " + ioexception2);
46                 return false;
47             }
48         } catch (Throwable e) {
49             e.printStackTrace();
50             Globals.Logger("发生错误:" + e, 2);
51             return false;
52         }
53   
54         return true;
55     }

4、利用FlexPaper展示

FlexPaper是一个被设计用来与PDF2SWF一起使用,开源轻量级的在浏览器上显示各种文档的组件, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。

01 SwfFile : escape(host+"/upload/web/2010-05-24-10-21-51139.swf"),
02       Scale : 0.6,
03       ZoomTransition : "easeOut",
04       ZoomTime : 0.5,
05         ZoomInterval : 0.1,
06         FitPageOnLoad : false,
07         FitWidthOnLoad : true,
08         PrintEnabled : false,
09         FullScreenAsMaxWindow : true,
10         localeChain: "zh_CN" //设置为中文
11       };
分享到:
评论

相关推荐

    FlexPaper+swfTools仿文档在线阅读

    FlexPaper+swfTools仿文档在线阅读是一种技术解决方案,它允许用户在网页上实现类似真实文档的在线预览体验。这种技术主要应用于那些希望提供无须下载即可在线查看各种文档格式(如PDF、DOC等)的网站和服务。下面将...

    Java+FlexPaper+swfTools 文档在线阅读

    Java+FlexPaper+swfTools 是一种常见的技术组合,用于实现文档在线预览和阅读功能。这个技术栈主要由三个核心组件组成:Java、FlexPaper 和 swfTools。下面将详细解释这三个组件以及如何整合它们来创建一个文档在线...

    Java+FlexPaper+swfTools_仿百度文库文档在线预览系统设计与实现

    ### Java+FlexPaper+swfTools_仿百度文库文档在线预览系统设计与实现 #### 关键技术点概述 本文档将详细阐述一个模仿百度文库文档在线预览系统的实现过程,该系统通过结合Java、FlexPaper和swfTools等技术手段,...

    FlexPaper+SWFTools+ASP.NET实现仿百度文库源码

    FlexPaper+SWFTools+ASP.NET实现仿百度文库源码是一种在线文档预览和分享的解决方案,它结合了多种技术来提供类似百度文库的功能。这个系统的主要目的是让用户能够方便地上传、浏览和分享各种格式的文档,如PDF、DOC...

    FlexPaper+swftools+jodConverter

    FlexPaper、SwfTools 和 JodConverter 是三个在文档在线预览领域中广泛使用的开源工具。下面将分别介绍这三个工具及其在文档处理中的作用。 1. **FlexPaper**: FlexPaper 是一款强大的在线文档查看和转换解决方案...

    在线文档浏览(OppenOfiice+FlexPaper+swftools)

    然后,通过FlexPaper将这些文档呈现为具有翻页效果的在线版本,提供用户友好的阅读体验;最后,Swftools可以用来优化文件大小,确保快速加载和流畅的浏览。这样,用户可以在任何地方、任何时间预览和交互文档,而...

    FlexPaper+SWFTools+ASP.NET(支持PDF).7z

    1. **在线阅读器**:开发一个Web应用,用户可以上传PDF文件,系统通过ASP.NET调用SWFTools进行转换,然后由FlexPaper展示为在线阅读界面。 2. **文档分享**:用户可以分享链接,其他人在任何设备上都能预览高质量的...

    Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现.pdf

    ### Java+FlexPaper+swfTools 仿百度文库文档在线预览系统设计与实现 本文将详细介绍如何使用Java结合FlexPaper和swfTools技术来实现一个类似百度文库的文档在线预览系统。该系统的主要功能是允许用户在线浏览各种...

    在线展示文档实例c#:FLEXPAPER+SWFTOOLS+office2016+vs15

    本文将详细讲解一个基于C#的在线文档展示实例,该实例利用了FLEXPAPER插件、SWFTOOLS以及Office 2016来实现从Office文件到PDF再到SWF的转换,最终实现在线展示的效果。 首先,我们来了解FLEXPAPER。FLEXPAPER是一款...

    java+flexpaper+swftools office转为swf

    Java结合FlexPaper、SWFTools和OpenOffice是一个常见的解决方案,用于将Microsoft Office文档转换为SWF格式,以便在Web上以交互式的方式展示。这个过程涉及到多个步骤和技术,以下是详细的解释: 1. **Java**: Java...

    Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现.docx

    根据提供的文档标题、描述、标签以及部分内容,本文将详细介绍如何使用Java、FlexPaper及swfTools来设计并实现一个类似于百度文库的文档在线预览系统。本系统旨在让用户能够在线预览各种类型的文档,无需下载或安装...

    openoffice+swftools+flexpaper在线预览文档

    FlexPaper接收由OpenOffice和SwfTools处理后的SWF文件,然后在用户的浏览器中呈现,提供流畅的在线阅读体验。 在实际操作中,这个流程可能是这样的: - 用户上传一个非PDF文档(如.doc或.xlsx)。 - 后端服务器...

    .net+swftools+flexpaper pdf转swf实现在线预览 在线文库效果 可运行

    《.NET + SWFTools + FlexPaper:PDF转SWF实现在线预览的全面解析》 在数字化时代,为了提供方便快捷的文档查看体验,许多网站和应用开始采用在线预览功能,尤其对于PDF文档。本文将深入探讨如何利用.NET框架、...

    FlexPaper_2.1.0+swftools-2013-02-19-1826

    最新FlexPaper2.1.0+swftools 0.9.2,仿百度文库,pdf第二种web展示方式, FlexPaper去版权图片,附件swftools工具直接生成swf Flexpaper无法打开的解决方案

    Java-FlexPaper-swfTools-仿百度文库文档在线预览系统设计与实现.docx

    Java-FlexPaper-swfTools-仿百度文库文档在线预览系统设计与实现 本文主要介绍了使用Java、FlexPaper和swfTools实现文档在线预览系统的设计和实现。该系统可以将上传的文档(包括ppt、word、excel、txt)转换为swf...

    openoffcie+swftools+flexpaper实现类似百度文库的阅读效果

    总的来说,通过OpenOffice的文档解析能力,SwfTools的SWF转换功能,以及FlexPaper的前端展示技术,我们可以构建一个类似百度文库的在线阅读平台,让用户在网页上便捷、舒适地浏览和预览各种类型的文档。这样的系统...

    仿百度文库方案[openoffice.org 3+swftools+flexpaper]

    仿百度文库方案[openoffice.org 3+swftools+flexpaper]对于不会写的菜鸟可以在几分钟内入门,里面有现成的代码,并且有详细流程。内附完整完美安装包,让你不虚费力去四处寻找。(openoffice安装包过大这里我会给出...

    Java实现文档在线预览demo(openoffice+swfTools+FlexPaper)

    在IT行业中,尤其是在Web开发领域,提供文档在线预览功能是一项常见的需求,它允许用户无需下载文件即可查看其内容。本篇文章将详细讲解如何利用Java技术栈,结合OpenOffice、swfTools和FlexPaper,来实现一个文档...

    文库openoffice.org 3+swftools+flexpaper

    文库openoffice.org 3+swftools+flexpaper word ppt excel 等转为pdf 转为swf

    java+swfTools+openoffice+FlexPaper在线阅读实例

    Java、SWFTools、OpenOffice 和 FlexPaper 是构建在线阅读平台的关键技术,它们共同作用于创建一个高效且用户友好的文档预览系统。这个实例主要关注如何将这些工具结合使用,为用户提供PDF、DOC等常见格式文档的在线...

Global site tag (gtag.js) - Google Analytics