热门标签 | 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地址]


推荐阅读
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • VB.net 进程通信中FindWindow、FindWindowEX、SendMessage函数的理解
    目录一、代码背景二、主要工具三、函数解析1、FindWindow:2、FindWindowEx:3、SendMessage: ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 在 Vue 项目中,为了提高页面加载速度和优化用户体验,实现图片上传前的压缩处理至关重要。本文介绍了如何通过集成第三方库和自定义组件,有效减小图片文件大小,确保在不影响图像质量的前提下,提升应用性能。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 在Unity中进行3D建模的全面指南,详细介绍了市场上三种主要的3D建模工具:Blender 3D、Maya和3ds Max。每种工具的特点、优势及其在Unity开发中的应用将被深入探讨,帮助开发者选择最适合自己的建模软件。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 使用 Vuex 管理表单状态:当输入框失去焦点时自动恢复初始值 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
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社区 版权所有