热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flask基于pdf.js的pdf在线阅读

先看效果图:下面开始说代码文件上传部分:

先看效果图:
效果图

下面开始说代码
文件上传部分:


<link href&#61;"/static/css/fileinput.css" media&#61;"all" rel&#61;"stylesheet" type&#61;"text/css" />
<script src&#61;"/static/js/canvas-to-blob.min.js" type&#61;"text/Javascript">script>
<script src&#61;"/static/js/sortable.min.js" type&#61;"text/Javascript">script>
<script src&#61;"/static/js/purify.min.js" type&#61;"text/Javascript">script>
<script src&#61;"/static/js/fileinput.js">script>
<script src&#61;"/static/js/zh.js">script>
<script src&#61;"/static/js/pt-BR.js">script>
<script src&#61;"/static/js/theme.js">script>
<script src&#61;"/static/js/LANG.js">script>

<script type&#61;"application/Javascript">function initFileInput(ctrlName, uploadUrl) {var control &#61; $(&#39;#&#39; &#43; ctrlName);control.fileinput({language: &#39;zh&#39;, //设置语言uploadUrl: uploadUrl, //上传的地址allowedFileExtensions : [&#39;pdf&#39;],//接收的文件后缀showRemove: false,showZoom: false,showCaption: false,//是否显示标题browseClass: "btn btn-primary", //按钮样式previewFileIconSettings: {&#39;pdf&#39;: &#39;&#39;}});}
script><div style&#61;"width:50%; padding-top: 5%"><label class&#61;"control-label">Select Filelabel
<input id&#61;"file-Portrait" type&#61;"file" class&#61;"file" data-preview-file-type&#61;"text"><script>initFileInput("file-Portrait", "/api/upload");script>
div>

UPLOAD_FOLDER &#61; &#39;./static/doc&#39;
app.config[&#39;UPLOAD_FOLDER&#39;] &#61; UPLOAD_FOLDER # 设置文件上传的目标文件夹&#64;app.route("/api/upload", methods&#61;["GET", "POST"])
def upload():file &#61; request.files.get("file_data")msg &#61; api_upload(app, file)upload_msg &#61; json.loads(msg.data.decode("utf-8"))errmsg &#61; upload_msg.get("errmsg")return jsonify({"msg": errmsg})def api_upload(app_boj, file):basedir &#61; os.path.abspath(os.path.dirname(__file__)) # 获取当前项目的绝对路径file_dir &#61; os.path.join(basedir, app_boj.config[&#39;UPLOAD_FOLDER&#39;]) # 拼接成合法文件夹地址if not os.path.exists(file_dir):os.makedirs(file_dir) # 文件夹不存在就创建fname &#61; file.filenameext &#61; fname.rsplit(&#39;.&#39;, 1)[1] # 获取文件后缀unix_time &#61; int(time.time())new_filename &#61; str(unix_time)&#43;&#39;.&#39;&#43;ext # 修改文件名file.save(os.path.join(file_dir, new_filename)) #保存文件到upload目录return jsonify({"result": 1, "new_name": new_filename, "errmsg": "上传成功"})

在线查看部分
先看一下这里要用到的pdf.js的组织结构&#xff08;这个很重要&#xff09;
组织结构1

组织结构2

组织结构3

<div class&#61;"container"><div class&#61;"row"><div class&#61;"col-lg-9 col-lg-offset-2" style&#61;"height: 595px"><iframe class&#61;"frame_style" src&#61;"http://127.0.0.1:5000/static/pdfjs/web/viewer.html?file&#61;\static\doc\1481953691.pdf">iframe>div>div>
div>

&#64;app.route(&#39;/show&#39;, methods&#61;["GET"])
def show_test():return render_template("show.html")

按照前面的组织结构组织好pdf.js之后&#xff0c;重点就在iframe的src部分了。这里为了方便演示写死的&#xff0c;可以作为参数传入&#xff0c;就能够实现点击文档在线查看了。

最后放上这个demo的git地址&#xff0c;可以下载pdf.js的部分&#xff0c;嵌入任何语言都一样使用。

[demo地址]


推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
瑶2012瑶_881
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有