最近一个项目需要实现一个在线浏览文档的功能。准备使用FlexPaper配合Pdf2Swf实现。

主要需求在于:

➔ 文档页数很多,少则几百页,多则上千页。
    ➔ 相应的文档大小也在50MB以上。

根据需求,将该功能拆分成了三部分:

➔ 上传:支持大文件,断点续传。
    ➔ 文件转换服务:在后台进行Pdf转Swf。
    ➔ 在线浏览:分页加载。

其中文件上传部分是我同事实现的,这里主要讲下后台服务和在线浏览部分。

文件转换服务

大体思路是:
    后台服务定时扫描文件夹PdfPath,如果发现Pdf文件,则调用Pdf2Swf.exe,将PDF逐页转换成Swf文件,存入SwfPath中的与文件名称对应的文件夹里。

这里使用了SwfTools套件中的Pdf2Swf工具:下载

主要代码:

Pdf2Swf调用代码

写服务的时候遇到一个奇怪的Bug,发布为服务的时候,测试用的Pdf文件每次转换到37页的时候就卡住了,但是用命令行进行调试的时候却一切OK。
    Google后发现,原来是Process的output流问题:output流只有2KB,而Pdf2Swf会产生大量输出,2KB很快就耗尽了。

之前在测试的时候,发现转换过程中会出现文字丢失的现象。这里使用了-s drawonlyshapes 这个参数,将Pdf全部作为图片转换的。这样虽然保证了兼容性,但是牺牲了空间。作为图片生成的Swf比文本格式的Swf要大不少,不知道大家有没有什么好的解决方法。

在线浏览

FlexPaper支持分页加载,采用{filename[*,padding],total pages}这种语法即可。

主要代码:

<a id="viewerPlaceHolder" style="width: 800px; height: 600px; display: block"></a>

<script type="text/javascript">
var fp = new FlexPaperViewer(
'FlexPaperViewer',
'viewerPlaceHolder', { config: {
SwfFile: 'SwfFolder/<%=Folder %>/{<%=Folder %>[*,0].swf,<%=PageNum %>}',
localeChain: "zh_CN", //中文
Scale: 1,
ZoomTransition: 'easeOut',
ZoomTime: 0.5,
ZoomInterval: 0.2,
FitPageOnLoad: false,
FitWidthOnLoad: false,
PrintEnabled: true,
FullScreenAsMaxWindow: false,
ProgressiveLoading: false,
MinZoomSize: 0.2,
MaxZoomSize: 5,
SearchMatchAll: false,
InitViewMode: 'Portrait', ViewModeToolsVisible: true,
ZoomToolsVisible: true,
NavToolsVisible: true,
CursorToolsVisible: true,
SearchToolsVisible: true
}
});
</script>
    FlexPaper无法载入中文文件名。如果右上角的圈圈一直在转,注意是不是文件名称的问题。   

参考文章

c# System.Diagnostics.Process 调用外部程序时WaitForExit锁死问题分析及解决方案

FlexPaper+SWFTools 实现仿百度文库及一些小问题

Pdf2Swf命令行参数

解决FlexPaper分页分段加载问题

源码

分页加载:FlexPaper.zip

文件转换服务:PDFtoSWFService.zip

最新文章

  1. [LeetCode] 3Sum 三数之和
  2. Form认证的几点说明
  3. agularJs 路由
  4. 如何让Chrome浏览器可以加载本地XML文件?
  5. mongodb分组,的两种方式,先记一下
  6. 深入理解Java内存模型(七)——总结
  7. iOS - UI - UIStepper
  8. 网站HTTP请求过程解析
  9. 此一生 一个纯js的ajax
  10. php的post和get方法
  11. 给新人follow代码想到的
  12. js如何获取一个月的天数 data javascript
  13. HDU-3665(单源最短路)
  14. Openjudge-NOI题库-和数
  15. Visual Studio 2017离线安装包下载、安装
  16. JVM运行、类加载的全过程
  17. python魔法函数之__getattr__与__getattribute__
  18. 使用Docker搭建CentOS 7 + Apache 2.4+ PHP7
  19. poj-1239(递推关系)好难
  20. (三)宏 __cplusplus C/C++混合编程

热门文章

  1. 【PHP开发】ThinkPHP3.1.3问题集及解决方法
  2. Android中的android:layout_width和android:width
  3. jQuery中slideToggle()的详细使用方法和解释
  4. 【BZOJ4520】[Cqoi2016]K远点对 kd-tree+堆
  5. 【BZOJ2510】弱题 期望DP+循环矩阵乘法
  6. EasyNVR+EasyDSS实现简单套路的RTMP、微信直播、录像、回放方案
  7. Python --- Scrapy 命令(转)
  8. 九度OJ 1079:手机键盘 (翻译)
  9. 创建node.js一个简单的应用实例
  10. SSL:Ubuntu证书配置