Web端编写(六)——浏览会议文件

18 篇文章 1 订阅
5 篇文章 0 订阅

老规矩,上效果图


这个页面是最复杂的页面,但也很简单。

PDF文件使用浏览器直接打开是不行的,除非是计算机,而且要装有PDF阅读软件,但平板怎么办?下载到本地再编一个PDF阅读器?我还没那个闲功夫,不过有强大的互联网,有开放的github,这个就好办了。大家可以去搜索一下一个叫PDF.JS的项目,这个项目就是利用JS解释渲染PDF文件的,不过有个缺点,要html5才支持,不过还好,项目的目标平板是华为的荣耀×1,安卓4.0以上的版本,webview已经支持html5了,所以就很容易解决啦。

先去下载支持库,https://github.com/mozilla/pdf.js,在页面右下角有Download ZIP,可以下载整个项目,我懒得分析学习,解压后整个拷贝到IIS目录了,把文件夹名改为PDFViewer,改其它名字老规矩,自己随意,但要注意修改JS的代码。

先上html代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ViewFile.aspx.cs" Inherits="MeetingSys.ViewFile" %>
<%@ Register TagName="WapTitle" TagPrefix="UC_Title" Src="AppUC/Title.ascx" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-Control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta name="viewport" content="user-scalable=yes, width=device-width"/>
    <title></title>
    <link rel="stylesheet" type="text/css" href="..\Styles\WapStyle.css"/>
    <script type="text/javascript" src="..\Scripts\MeetingSys.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\shared\util.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\display\api.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\display\metadata.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\display\canvas.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\display\webgl.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\display\pattern_helper.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\display\font_loader.js"></script>
    <script type="text/javascript" src="..\PDFViewer\src\display\annotation_helper.js"></script>
    <script type="text/javascript">
        PDFJS.workerSrc ='../PDFViewer/src/worker_loader.js';
        var FileURL = '<%=MeetingFile %>';
        var PageNum = 1;
        var PageCount = 0;
        //加载PDF文件,并指定显示的页码
        function RenderPage(num) {
            PDFJS.getDocument(FileURL).then(function (pdf) {
                pdf.getPage(num).then(function (page) {
                    var scale = 1;
                    var viewport = page.getViewport(scale);
                    var canvas = document.getElementById('the-canvas');
                    var context = canvas.getContext('2d');
                    canvas.height = viewport.height;
                    canvas.width = viewport.width;
                    var renderContext = {
                        canvasContext: context,
                        viewport: viewport
                    };
                    page.render(renderContext);
                    PageCount = pdf.numPages;
                    document.getElementById("trip").innerHTML = "第" +PageNum+ "页/共" + PageCount + "页";
                });
            });
        }
        //上一页
        function goPrevious() {
            if (PageNum <= 1)
                return;
            PageNum--;
            RenderPage(PageNum);
        }
        //下一页
        function goNext() {
            if (PageNum >= PageCount)
                return;
            PageNum++;
            RenderPage(PageNum);
        }
        //首页
        function goFirst() {
            PageNum = 1;
            RenderPage(PageNum);
        }
        //尾页
        function goLast() {
            PageNum = PageCount;
            RenderPage(PageNum);
        }
    </script>
</head>
<body  οnlοad="RenderPage(PageNum);">
    <form id="form1" runat="server">
    <div>
    <UC_Title:WapTitle ID="TopTitle" runat="server" />
    <div id="PopMenu">
	    <p οnclick="javascript :history.back(-1)">查看会议文件</p>
        <hr style="border:0;background-color:#777777;height:1px;margin: 0;padding:0;"/>
	    <p οnclick="PopContact();">联系我们</p>
		<p οnclick="PopAbout();">关于系统</p>
	</div>
    <div><canvas id="the-canvas"/></div>  
    <div id="ToolBar">
        <div id="first"οnclick="goFirst();"><img style="width:3.6em;height:1.8em;" src="..\WebImg\first.png" alt="" /></div>
        <div id="prev" οnclick="goPrevious();"><img style="width:3.6em;height:1.8em;" src="..\WebImg\Prev.png" alt="" /></div>        
        <div id="last" οnclick="goLast();"><img style="width:3.6em;height:1.8em;" src="..\WebImg\last.png" alt="" /></div>
        <div id="next" οnclick="goNext();"><img style="width:3.6em;height:1.8em;" src="..\WebImg\Next.png" alt="" /></div>
        <div id="tripdiv"><span id="trip">第页共页</span></div>
    </div>
    </div>
    </form>
</body>
</html>
很长,好像很复杂是不是?我也不清楚为什么,我把JS函数写到JS文件里面就是用不了,无法打开PDF文档,只好写在页面里了。核心是RenderPage(num)这个函数,是调用JS库打开PDF文件的,原理我也不懂,我是拿来主义,修改PDF.JS例子里面的helloworld搞出来的。其余代码能看到这个这篇博文的基本都能看懂了,就不多说了。

挑些重要的代码讲讲。

var FileURL = '<%=MeetingFile %>';这句代码是在后台定义一个全局变量,这个变量用来指定PDF文件的路径。

<body  οnlοad="RenderPage(PageNum);">这里用来页面加载JS函数,加载PDF文件的第一页

 <div><canvas id="the-canvas"/></div>这个就是显示PDF文件内容的容器啦,div这个不多说了,是限制显示的范围的,不加会出现滚动条,加了就会自动适应屏幕了。canvas元素是html5才有的,简单来说,它就是一个画板,用来画画的,PDF.JS就是把PDF文件渲染成一张张的图片,在canvas上面画出来。

为了canvas好看点,弄个圆角边框显得高大上,给它个CSS玩

the-canvas的样式

#the-canvas
{
    position:fixed;
    width:96%;
    left:2%;
    right:2%;
    top:2.7em;
    height:auto;
    border:1px solid #999;
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px;
    }
ToolBar层是个操作工具栏,和顶部的标题栏没什么鸟样,不过是卡在最下方而已,为了这个工具栏,我连显摆的版权声明栏都kill掉了

工具栏嵌套的层必须按这个顺序写,否则后果自负,会乱成一团的,哈哈。需要的图标自己制作,那个显示多少页的JS代码在RenderPage里面,就是那句“document.getElementById("trip").innerHTML = "第" +PageNum+ "页/共" + PageCount + "页";”

上后台代码

public partial class ViewFile : System.Web.UI.Page
    {
        public string MeetingFile = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            string FileID=Request.QueryString["ID"];
            MeetingFile = @"../MeetingFile/" + MeetingOP.DataOP.GetAny("MeetingFile", "mFileName", "ID", FileID);
            TopTitle.sTitle = MeetingOP.DataOP.GetAny("MeetingFile", "mTitle", "ID", FileID);
        }
    }
很简单,定义一个全局变量MeetingFile,获值后给JS,从数据库中读取指定ID的文件名,补上存放的目录赋值给MeetingFile。

好,样式表大放送

ToolBar层样式

#ToolBar
{
    position:fixed;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#39BFE4), to(#058BB0));
    margin: 0;
    border-bottom: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
    width:100%;
    height:1.8em;
    bottom:0;
    border-top:1px solid #999; 
    z-index:1100;
    }
first层样式

#first
{
    width:3.6em;
    height:1.8em;
    display: block;
    border-right: 1px solid #666;
    float:left;
    }
prev层样式

#prev
{
    width:3.6em;
    height:1.8em;
    display: block;
    left:3.6em;
    border-right: 1px solid #666;
    float:left;
    }
next层样式

#next
{
    width:3.6em;
    height:1.8em;
    display: block;
    right:3.6em;
    border-left: 1px solid #666;
    float:right;        
    }

last层样式

#last
{
    width:3.6em;
    height:1.8em;
    display: block;
    border-left: 1px solid #666;
    float:right;
    }
tripdiv层样式

#tripdiv
{
    margin:auto;
    height:1.8em;
    line-height:1.8em;
    color: #FFF;
    display: block;
    font-size: 1em;
    font-weight: bold;
    text-align: center;
    text-decoration: none;
    }
好,本系列博文基本就到此了,基本满足领导的要求了,取代印刷纸质文件,使用平板开会的基本功能已经可以实现了。

至于用户管理、终端管理,系统优化,等有项目开发经费再说,不要钱的项目开发就这鸟样了。

感觉俺完全对得起单位那丁点工资了,哈哈。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值