在开发服务器上,我可以创建一个pdf文件,并使用pdfkit将其发送给最终用户
返回pdf的我的视图
@changesBP.route('/pdf', methods=['GET'])
def pdfView():
if not 'dataDict' in session:
flash('Du skal uploade regneark for at kunne fortsætte på siden')
return redirect(url_for('indexBP.indexView'))
balanceChangelist = session['balanceGruppeChanges']
balanceGrupper = balanceData(data = session['dataDict'])
balanceListe = session['balanceListe']
resultatChangelist = session['resultatGruppeChanges']
resultatGrupper = resultatData(data = session['dataDict'])
resultatListe = session['resultatListe']
aendingsLister = []
for bc in balanceChangelist:
for c in bc['changes']:
if c['list'] not in aendingsLister:
aendingsLister.append(c['list'])
for rc in resultatChangelist:
for c in rc['changes']:
if c['list'] not in aendingsLister:
aendingsLister.append(c['list'])
options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'no-outline': None,
'quiet': ''
}
html = render_template('pdfTemplate.html', balanceChangelist = balanceChangelist,
balanceGrupper = balanceGrupper,
balanceListe = balanceListe,
resultatChangelist = resultatChangelist,
resultatGrupper = resultatGrupper,
resultatListe = resultatListe,
aendingsLister = aendingsLister)
out_File = BytesIO()
out_File.write(pdfkit.from_string(html, False, options=options))
out_File.seek(0)
return send_file(out_File,
attachment_filename='out.pdf',
as_attachment=True,
mimetype="application/pdf")
当通过gunicorn和Nginx在this guide提供应用程序时,我在访问pdf视图时遇到了一个错误的网关错误。
我可以在错误日志中提供一些帮助
2017/12/13 10:04:39 [error] 28047#28047: *78 upstream prematurely closed connection while reading response header from upstream, client: 10.2.20.180, server: 10.8.0.12, request: "GET /pdf HTTP/1.1", upstream: http://unix:/home/hepo/segesdupont/segesdupont.sock:/pdf", host: "10.8.0.12", referrer: "http://10.8.0.12/changes"
有什么想法吗?
此问题的内部错误是“UnicodeEncodeError:'ascii'codec无法在位置193编码字符'\xea':序号不在范围(128)”。在
您只需从用于生成pdf的html中删除任何特殊字符就可以解决这个问题。用“啊”代替“啊”。在
诊断要素:
可能的问题: 服务器上的
locale
配置错误。在解决方案:
第一步:试着看你的
locales
。在您的终端类型中:如果您的区域设置定义得很好,我想在您得到的结果中,对于日耳曼语言中的系统,会有一行类似
LANG=de_DE.UTF-8
。。。否则您需要to reconfigure your locales。在第2步:通过python解释器检查
^{pr2}$locales
:这些命令应该通知您在python上下文中
locale
的状态。您还必须在应用程序的特定上下文中查看locale
的状态。在在检查并最终更正之后,您必须调整用于为应用程序提供服务的脚本。在
例如,我使用
supervisor
来管理由Nginx+Gunicorn服务的应用程序。我的配置文件如下所示:结论:
将
environment=LANG="de_DE.UTF-8"
行添加到配置脚本(init.d
等)。或任何支持您的语言的配置;可能是您的locale system
默认使用的配置相关问题 更多 >
编程相关推荐