我如何在Python / Flask中返回msword文件数据以在iframe中呈现或嵌入到预览中?

问题描述 投票:0回答:1

我正在尝试从项目目录以HTML呈现(预览)已存储的Word或PDF文件。

例如,我有一个用户,他的简历存储在他的帐户中。现在,我想在他的帐户页面中给他预览他的简历。它可以是doc,docx或pdf。如何在Python / Flask中返回msword或pdf数据,以便可以在iframe中或嵌入到HTML / Jinja2中。这是我的代码

from flask import render_template, url_for, flash, redirect, request, abort, jsonify,session, send_file
import os
import mimetypes

@app.route("/account", methods=['GET', 'POST'])
@login_required
def account():

    resume = current_user.resume
    resumefile = downloadresume()
    return render_template('account.html', pagetitle='Account', profile_pic=profile_pic, form=form, resume=resume, resumefile = resumefile)

@app.route("/account/downloadresume", methods=['GET', 'POST'])
def downloadresume():
    filename = current_user.resume
    mime = mimetypes.MimeTypes().guess_type(filename)[0] 
    if mime in ["application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/msword"]:
        # return filename.data
        return send_file(resume.data, as_attachment=False)

Jinja / HTML

<iframe src="{{ resumefile }}"></iframe>
python flask get jinja2 mime-types
1个回答
0
投票

我不确定Word文档,但是我知道PDFjs库将能够加载PDF并将其渲染到画布中。

其用法示例可在此处找到:https://jsfiddle.net/pdfjs/9engc9mw/

// If absolute URL from the remote server is provided, configure the CORS
// header on that server.
var url = 'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf';

// Loaded via <script> tag, create shortcut to access PDF.js exports.
var pdfjsLib = window['pdfjs-dist/build/pdf'];

// The workerSrc property shall be specified.
pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';

// Asynchronous download of PDF
var loadingTask = pdfjsLib.getDocument(url);
loadingTask.promise.then(function(pdf) {
  console.log('PDF loaded');
  
  // Fetch the first page
  var pageNumber = 1;
  pdf.getPage(pageNumber).then(function(page) {
    console.log('Page loaded');
    
    var scale = 1.5;
    var viewport = page.getViewport({scale: scale});

    // Prepare canvas using PDF page dimensions
    var canvas = document.getElementById('the-canvas');
    var context = canvas.getContext('2d');
    canvas.height = viewport.height;
    canvas.width = viewport.width;

    // Render PDF page into canvas context
    var renderContext = {
      canvasContext: context,
      viewport: viewport
    };
    var renderTask = page.render(renderContext);
    renderTask.promise.then(function () {
      console.log('Page rendered');
    });
  });
}, function (reason) {
  // PDF loading error
  console.error(reason);
});
#the-canvas {
  border:1px solid black;
}
<script src="//mozilla.github.io/pdf.js/build/pdf.js"></script>

<h1>PDF.js 'Hello, world!' example</h1>

<canvas id="the-canvas"></canvas>

由于已在前端完成,因此只需确保可访问PDF文件。对于Word文件,我确定您可以将它们转换为PDF,但是您可能会失去一些功能。

© www.soinside.com 2019 - 2024. All rights reserved.