关于PDF在线阅读问题,比较普遍的做法是转换成swf文件来浏览;由于项目需要,就用 flexpaper 来实现了下,功能比较简单;但是文件的惰性加载确实让笔者挠头了一把!

下面是笔者的方法: 采用流的方式来读取每一页的swf文件,然后展示(pdf转换成多个swf文件网上一大把);亲自测试,100M的pdf文档,转换后在线浏览,延迟不超过1s;

JSP页面 :

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>

  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <base href="<%=basePath%>">
  10.  
  11. <title>在线阅读</title>
  12. <style>
  13. .box{
  14. width: 99%;
  15. height: 500px;
  16. border: 1px solid #CCC;
  17. margin: 10px auto;
  18. }
  19. </style>
  20.  
  21. <script type="text/javascript" src="<%=basePath%>common/js/jquery-1.7.min.js"></script>
  22. <script type="text/javascript" src="<%=basePath%>common/js/flexpaper/flexpaper_flash.js" ></script>
  23. <script type="text/javascript" src="<%=basePath%>common/js/pdf2swf.js" ></script>
  24. <script>
  25. var basePath = "<%=basePath%>";
  26. // var bh = "${zy.id}";//资源编号
  27. // var nwpg = "${nowPg}";//资源当前页数
  28. var bh = "0020150929000008"; //测试用的资源编号(也是物理文件名称)
  29. var nwpg = "1";//默认从第一页开始加载
  30. $(function(){
  31. var url = null;
  32. url = basePath+"flexpaper?bh="+bh+nwpg+"{[*,0],100}";
  33. pdf2swf(url);
  34. });
  35.  
  36. </script>
  37. </head>
  38. <body>
  39. <div class="box" >
  40. <div id="viewerPlaceHolder" style="width:100%;height:100%;display:block"></div>
  41. </div>
  42. </body>
  43. </html>

JAVA后台代码:

  1. package com.zwc.servlet;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.io.OutputStream;
  8.  
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. public class FlexPaperServlet extends HttpServlet {
  15.  
  16. public void doGet(HttpServletRequest request, HttpServletResponse response)
  17. throws ServletException, IOException {
  18. doPost(request,response);
  19. }
  20. public void doPost(HttpServletRequest request, HttpServletResponse response)
  21. throws ServletException, IOException {
  22. String bh = request.getParameter("bh");//该bh为 bh+ nwpg;资源编号+当前页数
  23.  
  24. String path= bh+".swf";
  25. String swfdir = "D:/data/zypt/swf/";//获得文件夹路径
  26.  
  27. File f = new File(swfdir+path);//拿到当前页面文件
  28. FileInputStream fis = null;
  29. OutputStream out = null ;
  30. try {
  31. response.setContentType("application/x-shockwave-flash");
  32. response.setHeader("Accept-Ranges", "bytes");
  33. fis = new FileInputStream(f) ;
  34. out = new BufferedOutputStream(response.getOutputStream());
  35. byte[] bytes = new byte[(int) f.length()];
  36. response.setContentLength(bytes.length);
  37. fis.read(bytes) ;
  38. fis.close() ;
  39. out.write(bytes) ;
  40. out.flush() ;
  41. }catch (Exception e) {
  42. }finally{
  43. if(null != out){
  44. out.close();
  45. }
  46. }
  47. }
  48. }

WEB.xml文件Servlet配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <display-name></display-name>
  8. <servlet>
  9. <description>This is the description of my J2EE component</description>
  10. <display-name>This is the display name of my J2EE component</display-name>
  11. <servlet-name>FlexPaperServlet</servlet-name>
  12. <servlet-class>com.zwc.servlet.FlexPaperServlet</servlet-class>
  13. </servlet>
  14.  
  15. <servlet-mapping>
  16. <servlet-name>FlexPaperServlet</servlet-name>
  17. <url-pattern>/flexpaper</url-pattern>
  18. </servlet-mapping>
  19. <welcome-file-list>
  20. <welcome-file>index.jsp</welcome-file>
  21. </welcome-file-list>
  22. </web-app>

pdf2swf.js代码:

  1. function pdf2swf(url){
  2. var p = new FlexPaperViewer(
  3. basePath+'common/js/flexpaper/FlexPaperViewer',
  4. 'viewerPlaceHolder',
  5. {config :
  6. {
  7. SwfFile:encodeURI(url),
  8. Scale :1.0,
  9. ZoomTransition : 'easeOut',
  10. ZoomTime : 0.5,
  11. ZoomInterval : 0.2,
  12. FitPageOnLoad : false,
  13. FitWidthOnLoad : false,
  14. FullScreenAsMaxWindow : true,
  15. ProgressiveLoading : true,
  16. MinZoomSize : 0.2,
  17. MaxZoomSize : 5,
  18. SearchMatchAll : false,
  19. StartAtPage : nwpg,
  20. InitViewMode : 'Portrait',
  21. ViewModeToolsVisible : true,
  22. ZoomToolsVisible : true,
  23. NavToolsVisible : true,
  24. CursorToolsVisible : true,
  25. SearchToolsVisible : true,
  26. // localeChain: 'en_US'
  27. localeChain: 'zh_CN',
  28. }
  29. }
  30. );
  31. }

jsp所需js文件:

  <script type="text/javascript" src="<%=basePath%>common/js/jquery-1.7.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>common/js/flexpaper/flexpaper_flash.js" ></script>
    <script type="text/javascript" src="<%=basePath%>common/js/pdf2swf.js" ></script>

源码:下载 ;暂时只支持文档类型(不包括txt),视频没来得及整理,中文名称文件暂时有点问题凑活看吧!

PDF在线阅读 FlexPaper 惰性加载 ;的更多相关文章

  1. web版pdf在线阅读器

    近期论坛里有人提到了,在线pdf阅读器怎么做.我百度了一下,发现非常多人都非常懒.程序猿都非常懒吗? 答案是否定的. 为什么都不愿意去搜索一下呢.网上非常多答案的.我这里就列举一例.大家共勉. 看代码 ...

  2. Angular2 ng2 如何配置惰性加载

    需要修改至少四个地方1. 将子组件进行模块化操作2.生成子组件module .子组件router3.配置主路由 信息 改为loadChild4.配置appModule 删除引入 以product组件 ...

  3. 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形网格惰性加载节点

    jQuery EasyUI 树形菜单 - 树形网格惰性加载节点 有时我们已经得到充分的分层树形网格(TreeGrid)的数据. 我们还想让树形网格(TreeGrid)按层次惰性加载节点. 首先,只加载 ...

  4. angular惰性加载拓展剖析

    最近把一个比较旧的业余项目重新升级了下,将主文件进行了剥离,增加了些惰性加载的配置,将过程中一些零散的知识点做个总结,同时尽量深入原理实现层面. 项目环境: 前端框架:angular2.0.0-bet ...

  5. 关于angular5的惰性加载报错问题

    之前为了测试一个模块优化问题,于是用angular-cli快速搭建了个ng5的脚手架demo,在应用惰性加载功能的时候发现浏览器报错如下: ERROR Error: Uncaught (in prom ...

  6. Angular惰性加载的特性模块

    一:Angular-CLI建立应用 cmd命令:ng new lazy-app --routing    (创建一个名叫 lazy-app 的应用,而 --routing 标识生成了一个名叫 app- ...

  7. Django惰性加载和LazyObject

    看登录中间件的时候发现request.user返回的是SimpleOject对象,往下看翻到了LazyObject,看源码看了半天没看懂 网上搜了一堆资料了解下惰性加载实现是的什么功能,再回去看源码, ...

  8. javascript 性能惰性加载2016.12.13

    利用函数的惰性载入提高 javascript 代码性能 原文:利用函数的惰性载入提高javascript代码性能 作者:阿安 在 javascript 代码中,因为各浏览器之间的行为的差异,我们经常会 ...

  9. Android开发问题积累 <加载在线Gif><WebView无法加载网页图片>

    在线Gif加载 解决办法 Glide完美解决 Glide.with(context).load(pic).placeholder(R.drawable.loading).into(imageView) ...

随机推荐

  1. Web应用架构的新趋势

    系统架构:Web应用架构的新趋势---前端和后端分离的一点想法   最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前 ...

  2. 玩转python之测试一个对象是否是类字符串

    提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个 ...

  3. c# in deep 之Lambda表达式于LINQ表达式结合后令人惊叹的简洁(2)

    当Lambda表达式和LINQ一起使用时,我们会发现原本冗长的代码会变得如此简单.比如我们要打印0-10之间的奇数,让其从高到低排列并求其平方根,现在只用一行代码即可完成其集合的生成,直接上代码: v ...

  4. Excel开发

    浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法   Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家 ...

  5. api的安全问题

      在给第三方系统提供api时,我们需要注意下安全问题. 比较常见的接口有http接口.以http接口为例.我们需要注意的几点: 1.只有被允许的系统才可以调用api 2.如果http请求被截获.也不 ...

  6. Best Cow Line(POJ No.3617)

    问题: 链接:http://poj.org/problem?id=3617 思路: 按照字典序比较S和将S反转后的字符串S' 如果S较小,就从S的开头取出一个字符,加到T的末尾(更新下标值) 如果S’ ...

  7. 使用WCF扩展记录服务调用时间

    随笔- 64  文章- 0  评论- 549  真实世界:使用WCF扩展记录服务调用时间   WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Lay ...

  8. 自定义html标签

    自定义html标签 (觉得页面全是div 的解决办法 来个个性化) 办法一(来源于 让ie支持html5标签的方法): 在ie9以前如果要自定义要使用document.createElement的方法 ...

  9. A First Look at Rust Language

    文 Akisann@CNblogs / zhaihj@Github 本篇文章同时发布在Github上:http://zhaihj.github.io/a-first-look-at-rust.html ...

  10. Java乔晓松-android中的帧动画FrameByFrame

    先看效果后上代码: 动画开始---- 动画切换的界面---- 动画播放完毕后的跳转界面----- 重要的方法: imageView.setBackgroundResource(R.anim.frame ...