如何返回Python/Flask中的msword文件数据以在iframe中渲染或嵌入以预览?

如何返回Python/Flask中的msword文件数据以在iframe中渲染或嵌入以预览?,python,flask,get,jinja2,mime-types,Python,Flask,Get,Jinja2,Mime Types,我正在尝试从项目目录中以HTML格式呈现(预览)存储的Word或PDF文件 例如,我有一个用户,他的简历存储在他的帐户中。现在我想在他的账户页面上给他一个简历预览。它可以是doc、docx或pdf。如何在Python/Flask中返回msword或pdf数据,以便在iframe或Embedded中以HTML/Jinja2呈现。这是我的密码 from flask import render_template, url_for, flash, redirect, request, abort, js

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

例如,我有一个用户,他的简历存储在他的帐户中。现在我想在他的账户页面上给他一个简历预览。它可以是doc、docx或pdf。如何在Python/Flask中返回msword或pdf数据,以便在iframe或Embedded中以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
我不确定Word文档,但我知道该库将能够加载PDF并将其呈现到画布中

可在此处找到其用法示例:

//如果提供了来自远程服务器的绝对URL,请配置CORS
//该服务器上的头。
var url='1〕https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf';
//通过标签加载,创建访问PDF.js导出的快捷方式。
var pdfjsLib=window['pdfjs-dist/build/pdf'];
//应规定工人的财产。
pdfjsLib.GlobalWorkerOptions.workerSrc='/mozilla.github.io/pdf.js/build/pdf.worker.js';
//PDF的异步下载
var loadingTask=pdfjsLib.getDocument(url);
loadingTask.promise.then(函数(pdf){
console.log('PDF-loaded');
//取第一页
var pageNumber=1;
getPage(页码)。然后(函数(第页){
console.log(“页面加载”);
var标度=1.5;
var viewport=page.getViewport({scale:scale});
//使用PDF页面维度准备画布
var canvas=document.getElementById('the-canvas');
var context=canvas.getContext('2d');
canvas.height=viewport.height;
canvas.width=viewport.width;
//将PDF页面呈现到画布上下文中
var renderContext={
背景:背景,
视口:视口
};
var renderTask=page.render(renderContext);
renderTask.promise.then(函数(){
log(“呈现的页面”);
});
});
},功能(原因){
//PDF加载错误
控制台错误(原因);
});
#画布{
边框:1px纯黑;
}

PDF.js“你好,世界!”实例

有两种可能的方法来实现这一点。您没有单一的方法来呈现pdf和docx文件

对于pdf文件:

  • 您可以使用@MichaelBauer所述的方法,也可以在目录中放置指向pdf文件的超链接。所有当前浏览器都能够从任何脱机或联机目录呈现pdf文件
用于docx文件

  • 您必须将docx文件转换为pdf文件,以便更容易进行渲染。然后按照转换后的pdf进行渲染。至于将pdf无缝转换为docx,您可以使用Adobe的DocumentCloudSDK服务
<iframe src="{{ resumefile }}"></iframe>