有了Flask,我将发送附有xml和pdf的电子邮件。 在邮件发送之前,我想预览一下pdf文件,这样用户就可以检查数据了。在
pdf是用PDFOrder函数从xml构造的。PDF存储在变量“PDF”中。所以,我的问题是如何在内存中生成pdf,并将其作为预览提供给用户?在
以下是发送电子邮件的示例代码:
def send_mail():
Email1 = session.get('Email1')
Email2 = session.get('Email2')
invno = session.get('invno')
username = session['username']
invId = session['invId']
xmlStr,xmlFile = XmlGenerator(invId)
try:
msg = Message(Hi,
sender="somemail@gmail.com",
recipients=[Email1,Email2])
msg.body = '\nHi'
myxmlinv = xml.dom.minidom.parseString(xmlStr)
xmlStr = myxmlinv.toprettyxml(encoding="utf-8")
msg.attach("Test+".xml","application/xml",xmlStr)
buff = BytesIO()
pdfdoc = SimpleDocTemplate(buff, pagesize = letter)
frame = Frame(pdfdoc.leftMargin,
pdfdoc.bottomMargin,
pdfdoc.width,
pdfdoc.height,
id = 'normal')
template = PageTemplate(id = 'test', frames = frame)
pdfdoc.addPageTemplates(template)
pdforder = PDFOrder(xmlStr)
Document = pdforder.createPDF()
pdfdoc.build(Document)
pdf = buff.getvalue()
buff.close()
msg.attach("Test_"+str(invId)+".pdf", "application/pdf", str(pdf))
mail.send(msg)
except Exception, e:
return(str(e))
下面的代码将用户带到/预览,它应该打开pdf。我更喜欢把pdf存储在内存中。我要如何用HTML呈现它?在
^{pr2}$在 在
谢谢!在
更新
我设法保存了pdf文件。但不幸的是,它只包含了reportlab的一些测试,尽管它的扩展名是.pdf。所以,homehow不会以pdf格式呈现。有什么想法吗?奇怪的是电子邮件发送可以完美地与xml和pdf一起使用。你认为这部分很重要:"application/pdf", str(pdf)
这是我最新的定义
@app.route('/preview/')
def preview():
invId = session['invId']
xmlStr,xmlFile = XmlGenerator(invId)
try:
myxmlinv = xml.dom.minidom.parseString(xmlStr)
xmlStr = myxmlinv.toprettyxml(encoding="utf-8")
pdfdoc = SimpleDocTemplate("/var/www/FlaskApp/FlaskApp/static/mypdf.pdf", pagesize = letter)
pdforder = PDFOrder(xmlStr)
Document = pdforder.createPDF()
pdfdoc.build(Document)
except Exception, e:
return(str(e))
return render_template("test.html")
据我所知,你实际上并没有命名你的PDF文件。这将在
simpledoc
声明中完成。下面是我所做的一个例子:doc = SimpleDocTemplate(filename, pagesize=letter)
在这种情况下,filename
变量是我想要pdf的完整路径。 示例:filename = r'C:\User\joe\Desktop\some_file.pdf
'`如果你想让文件进入你正在使用的同一个目录,你只需给它一个名字,而不需要完整的路径。即:
filename = 'some_file.pdf'
一旦代码到达
doc.build
行,它将创建pdf。在要打开它,请使用以下行之一:
对于Mac电脑:
os.system("open " + filename)
窗口:
os.system("start " + filename)
相关问题 更多 >
编程相关推荐