zoukankan      html  css  js  c++  java
  • FlexPaper+SwfTools实现的在线文档功能

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

    主要需求在于:

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

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

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

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

    文件转换服务

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

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

    主要代码:

    Pdf2Swf调用代码
    gentleface.com free icon set

        写服务的时候遇到一个奇怪的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=" 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>
    warning     FlexPaper无法载入中文文件名。如果右上角的圈圈一直在转,注意是不是文件名称的问题。   

    参考文章

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

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

    Pdf2Swf命令行参数

    解决FlexPaper分页分段加载问题

    源码

    分页加载:FlexPaper.zip

    文件转换服务:PDFtoSWFService.zip

  • 相关阅读:
    # 泰语字符串字符分割 --- UTF-8编码格式
    dos命令(Cacls和Icacls) -- 显示或者修改文件的访问控制表
    win8上cmder文字重叠问题
    C++虚函数的新用法
    Tomcat 7.0 servlet @WebServlet
    Win7获取管理权限修改Host文件以其他权限问题
    如何为网页添加小宠物挂件:小老鼠、金鱼等
    怎么解决tomcat占用8080端口问题图文教程
    Stream流
    函数式接口
  • 原文地址:https://www.cnblogs.com/systemnet123/p/3896846.html
Copyright © 2011-2022 走看看