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
|
};
|
5、演示地址
http://www.4th-games.org.cn/sis/public/info.html?doAction=scsg&bsdxid=1009&cdate=all
PDF在线阅读开发经验(FlexPaper+SWFTools+SaveAsPDFandXPS)相关推荐
- JAVA常用API或编程工具003--实现pdf在线阅读功能之pdf.js
pdf.js简介 PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品.简单说就是一个 PDF 解析器.运用HTML5JavaScript(即pdf.js仅使用安全的w ...
- java pdf在线阅读插件_JAVA实现在线查看PDF和office文档
一个项目中要做一个在线预览附件(和百度文库差不多)的小功能点,楼主在开发过程中踩了很多坑的同时也总结了一些方法,仅供广大猿友参考,那么要实现这个小功能,目前主要是有如下3种可行的实现方式,下面先说实现 ...
- python实践pdf在线阅读_Python机器学习实践指南 PDF高清完整版
Python机器学习实践指南 PDF高清完整版 作者: 库姆斯 (Alexander T.Combs) 出品方: 异步社区 原作名: Python Machine Learning Blueprint ...
- VUE实现PDF在线阅读
1.安装npm npm install --save vue-pdf 2.HTML部分 <div v-if="dataForm.pdfUrl !== '' & dataForm ...
- 憋个大招!高性能mysql第四版pdf在线阅读
纯手打"RocketMQ笔记" 第一节:RocketMQ介绍 1.1 核心概念(主题.生产者.消费者.消息) 1.2 RocketMQ的设计理念和目标(设计理念.设计目标) 第二节 ...
- html 在线阅读器 flexpaper的使用
http://blog.csdn.net/u012963660/article/details/16979721
- pdf怎么在线阅读?一键查阅并不难
PDF格式的文件已经成为现代生活中不可或缺的一部分,无论是学术论文.电子书.工作文件还是表格,都有可能以PDF格式出现.然而,为了读取这些文件,我们需要安装PDF阅读器,这在某些情况下可能会带来不便. ...
- [Asp.net]使用flexpaper+swftools大文件分页转换实现在线预览
引言 之前总结了在线预览几种常见解决方案,可以戳这里: http://www.cnblogs.com/wolf-sun/p/3569960.html http://www.cnblogs.com/wo ...
- PDF格式的“在线阅读”和“下载”
产生背景: 一个需求,用户可在线阅读PDF,也可下载到本地.听需求来源说人家的网站上的可以做,问我们能做吗,需要这个功能,就要来了网址,看看页面. 问题:上传PDF文件后,发现访问地址在浏览器上打开, ...
- python程序设计从基础到开发电子书_Python核心编程从入门到开发实战(pdf+txt+epub+azw3+mobi电子书在线阅读下载)...
作者:朱红庆 格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT 内容简介: 本书以学会.用好 Python 语言进行软件编程为目标,不仅讲解了基本概念.数据类型.变量.运算符. ...
最新文章
- NuGet安装和使用
- spring aop 应用实例
- 2.6 multimap
- OPENSSL introduce itself from baidu
- 【问题10】使用Redis SETNX 命令实现分布式锁
- 温湿度传感器实验-传感器原理及应用实验
- 输出今天是星期几并计算n天后的日期(万年历)
- 想加薪怎么和领导谈?学会这四招轻松涨薪
- 数据分析,把握商机 关键词采集工具助你挖掘潜在客户
- 威斯康星大学硕士计算机科学,2020年威斯康星大学密尔沃基分校排名TFE Times美国最佳计算机科学硕士专业排名第90...
- 基层管理者的第一步——从“我”变成“我们”
- 利用U盘里的GHOST文件恢复系统
- GAMES101作业1-VS2019
- 9月有哪些程序员新书与您相约?
- UEdit百度富文本编辑器
- uniapp 刷新页面
- Redis——热点key问题
- HTML学习笔记——各种居中对齐
- 软件测试(基础)· 软件测试的生命周期 · 如何描述一个 Bug · Bug 的级别 · Bug 的生命周期 · 争执 · Bug 评审
- 【信管1.18】IT服务管理与监理
热门文章
- JS中Ajax的方法和应用
- 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)
- 冒险岛单机版mysql_冒险岛单机版
- 使用Python剪辑 拼接音频文件
- 如何下载STM32某型号MCU的数据手册(datasheet)
- 2021大学计算机一级考试试题题库,2021年全国计算机等级考试一级试题及答案.pdf...
- 西门子V90 PN伺服EPOS模式+FB284功能库使用示例教程(图文)
- 计算机组成原理 唐朔飞 知识点,计算机组成原理知识点总结(唐朔飞版)
- 【高级开发必掌握SQL】SQL优化篇
- 2-Python程序实例解析