源起看到某个公司内网的公文使用FlexPaper组件来显示文档,在这儿是GoogleCode Project的主页, 还有现在的官方主页。目前FlexPaper是个开源项目,GPLv3协议下免费使用,也有商业许可版本与无限制版。下面我们先介绍如何从预览的SWF中保存成PDF文档。
查看网页html,找到如下,看到这里使用是FlexPaperViewer 1.5.1:
<object width="100%" height="100%" id="_571282476" name=
"_571282476" data=
"/st/static/common/js/flexpaper/FlexPaperViewer1.5.1.swf" type=
"application/x-shockwave-flash"><param name="wmode" value=
"transparent">
<param name="allowfullscreen" value="true">
<param name="allowscriptaccess" value="always">
<param name="quality" value="high">
<param name="flashvars" value=
"SwfFile=%2Fodm%2Fdocument%2Fdocument!getSWFStream.action%3FdocumentId%3D8126&Scale=0.95&ZoomTransition=easeOut&ZoomTime=0.5&ZoomInterval=0.2&FitPageOnLoad=true&FitWidthOnLoad=true&MinZoomSize=0.2&MaxZoomSize=5&InitViewMode=Portrait&ViewModeToolsVisible=true&ZoomToolsVisible=true&NavToolsVisible=true&CursorToolsVisible=true&SearchToolsVisible=true&localeChain=zh_CN&key=$72815cdaaec3681f9d0"></object>
提取出的参数是这样的:
SwfFile=%2Fodm%2Fdocument%2Fdocument!getSWFStream.action%3FdocumentId%3D8127
&Scale=0.95&ZoomTransition=easeOut
&ZoomTime=0.5&ZoomInterval=0.2&FitPageOnLoad=true
&FitWidthOnLoad=true
&MinZoomSize=0.2&MaxZoomSize=5
&InitViewMode=Portrait
&ViewModeToolsVisible=true
&ZoomToolsVisible=true&NavToolsVisible=true
&CursorToolsVisible=true&SearchToolsVisible=true&localeChain=zh_CN
FlexPaper部分参数说明
SwfFile(String):需要使用FlexPaper打开的文档
Scale(Number):初始化缩放比例,参数值应该是大于零的整数(1=100%)
ZoomTransition(String):FlexPaper中缩放样式,它使用和Tweener一样的样式,默认参数值为easeOut,其他可选值包括:easenone,easeout,linear,easeoutquad
ZoomTime(Number):从一个缩放比例变为另外一个缩放比例需要花费的时间,该参数值应该为0或更大
ZoomInterval(Number):缩放比例之间间隔,默认值为0.1,该值应该为正数
FitPageOnLoad(Boolean):初始化时自适应页面,与使用工具栏上的适应页面按钮同样的效果
FitWidthOnLoad(Boolean):初始化时自适应页面宽度,与工具栏上的适应宽度按钮同样的效果
看上面的参数,我们得知 %2Fodm%2Fdocument%2Fdocument!getSWFStream.action%3FdocumentId%3D8127 这个字符串是文件源,然后我们可以使用百度应用URL解码得到这样的结果/odm/document/document!getSWFStream.action?documentId=8127, 然后我们就可以直接在浏览器访问拼接以后的URL
http://odm.xxxxx.com/odm/document/document!getSWFStream.action?documentId=8127
这时我们可以使用打印文件方式来保存为PDF文件, 借用doPdf,Pdf factory组件也可以轻易保存PDF。到这儿我们是逆向的方式来保存文档。
FlexPaper目前最新版本是2.2.1,另外还有一个开源项目swftools可以转换pdf文件到swf文件。下载服务端DEMO,可以看到支持asp.net, java, php平台。 以下介绍Asp.net下,有几个简单的页面来配置,之前把...\FlexPaper_2.2.1\aspnet设为Application,这些webform的文件带有cs源文件,可以修改重新编译,或是改写为Asp.net MVC也不是什么难事。如下图是显示当前路径下的文档:
当我们打开这个文件在IE9中是这样的:
看服务端文档的目录下文件Performance Driven IT Management.pdf, 有被自动转换了许多的Performance Driven IT Management.pdf1.swf…的文件。这样是为了加快加载速度。这样,借用Flexpaper与swftools我们很容易构建WEB在线PDF文档浏览系统。
您可能感兴趣的文章:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。