我正在尝试从项目目录以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)
<iframe src="{{ resumefile }}"></iframe>
我不确定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,但是您可能会失去一些功能。