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

先看效果图:
效果图

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

<!--引入几个依赖-->
<link href="/static/css/fileinput.css" media="all" rel="stylesheet" type="text/css" />
<script src="/static/js/canvas-to-blob.min.js" type="text/javascript"></script>
<script src="/static/js/sortable.min.js" type="text/javascript"></script>
<script src="/static/js/purify.min.js" type="text/javascript"></script>
<script src="/static/js/fileinput.js"></script>
<script src="/static/js/zh.js"></script>
<script src="/static/js/pt-BR.js"></script>
<script src="/static/js/theme.js"></script>
<script src="/static/js/LANG.js"></script>
<!--初始化一个上传组件-->
<script type="application/javascript">
    function initFileInput(ctrlName, uploadUrl) {
        var control = $('#' + ctrlName);
        control.fileinput({
            language: 'zh', //设置语言
            uploadUrl: uploadUrl, //上传的地址
            allowedFileExtensions : ['pdf'],//接收的文件后缀
            showRemove: false,
            showZoom: false,
            showCaption: false,//是否显示标题
            browseClass: "btn btn-primary", //按钮样式
            previewFileIconSettings: {
                'pdf': '<i class="fa fa-file-pdf-o text-danger"></i>'
            }
        });
    }
</script>

<div style="width:50%; padding-top: 5%">
    <label class="control-label">Select File</label
    <input id="file-Portrait" type="file" class="file" data-preview-file-type="text">
    <script>
        initFileInput("file-Portrait", "/api/upload");
    </script>
</div>
UPLOAD_FOLDER = './static/doc'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER  # 设置文件上传的目标文件夹

@app.route("/api/upload", methods=["GET", "POST"])
def upload():
    file = request.files.get("file_data")
    msg = api_upload(app, file)
    upload_msg = json.loads(msg.data.decode("utf-8"))
    errmsg = upload_msg.get("errmsg")
    return jsonify({"msg": errmsg})

def api_upload(app_boj, file):
    basedir = os.path.abspath(os.path.dirname(__file__))  # 获取当前项目的绝对路径
    file_dir = os.path.join(basedir, app_boj.config['UPLOAD_FOLDER'])  # 拼接成合法文件夹地址
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)  # 文件夹不存在就创建
    fname = file.filename
    ext = fname.rsplit('.', 1)[1]  # 获取文件后缀
    unix_time = int(time.time())
    new_filename = str(unix_time)+'.'+ext   # 修改文件名
    file.save(os.path.join(file_dir, new_filename))  #保存文件到upload目录
    return jsonify({"result": 1, "new_name": new_filename, "errmsg": "上传成功"})

在线查看部分
先看一下这里要用到的pdf.js的组织结构(这个很重要)
组织结构1

组织结构2

组织结构3

<div class="container">
    <div class="row">
        <div class="col-lg-9 col-lg-offset-2" style="height: 595px">
            <iframe class="frame_style" src="http://127.0.0.1:5000/static/pdfjs/web/viewer.html?file=\static\doc\1481953691.pdf">
            </iframe>
        </div>
    </div>
</div>
@app.route('/show', methods=["GET"])
def show_test():
    return render_template("show.html")

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

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

[demo地址]

要使用 Flaskpdfobject 实现在线浏览 PDF,您需要先将 PDF 文件上传到服务器,然后通过 Flask 提供的路由将 PDF 文件的 URL 返回给 PDFObject。下面是一个简单的示例: 1. 安装 Flaskpdfobject 您可以通过 pip 安装 Flaskpdfobject: ``` pip install Flask pip install pdfobject ``` 2. 创建 Flask 应用 ```python from flask import Flask, request, Response import pdfobject app = Flask(__name__) # 上传 PDF 文件 @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] # 保存文件 file.save('path/to/save/file.pdf') # 返回 PDF 文件的 URL return 'http://example.com/path/to/save/file.pdf' # 在线浏览 PDF 文件 @app.route('/view/<filename>') def view(filename): # 生成 PDFObject HTML 代码 html = pdfobject.embed(filename, height='500px', width='100%') # 返回 HTML 代码 return Response(html, mimetype='text/html') ``` 3. 创建 HTML 页面 ```html <!DOCTYPE html> <html> <head> <title>PDF Viewer</title> <script src="//cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js"></script> </head> <body> <div id="pdf"></div> <script> // 获取 PDF 文件的 URL var url = "{{ url_for('view', filename='file.pdf') }}"; // 使用 PDFObject 显示 PDF 文件 PDFObject.embed(url, "#pdf"); </script> </body> </html> ``` 在这个示例中,您需要将 PDF 文件上传到服务器的 `path/to/save/file.pdf` 目录中,并使用以下命令启动 Flask 应用: ``` FLASK_APP=app.py flask run ``` 然后,您可以通过访问 `http://localhost:5000/view/file.pdf` 在线浏览 PDF 文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值