使用AWS Chalice生成PDF

时间:2017-03-20 14:54:46

标签: python amazon-web-services pdf serverless-architecture chalice

我正在寻找为我创建内部API,它将生成pdf作为API调用并使用chalice将其部署为无服务器。 到目前为止,我有代码,我遇到500错误,我无法调试:

from chalice import Chalice, Response

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.lib.pagesizes import landscape

from io import BytesIO

app = Chalice( app_name = 'printago' )


@app.route( '/' )
def index( ) :

    buff = BytesIO( )
    # p = canvas.Canvas( 'someName.pdf', pagesize = landscape( letter ) )
    p = canvas.Canvas( buff, pagesize = landscape( letter ) )

    p.setFont( 'Helvetica', 40, leading = None )
    p.drawCentredString( 415, 300, 'Hallo YOU' )
    p.showPage( )
    p.save( )

    pdf = buff.getvalue( )
    buff.close( )

    return Response( pdf, status_code = 200, headers = { 'Content-Type' : 'application/pdf' } )

我做错了什么?

我有这个项目的虚拟环境,通过pip安装了reportlab,打开调试后出现错误无法导入模块

'app': No module named reportlab.pdfgen

我可以通过将reportlab添加到requirments.txt文件来传递“No module”错误,但是在此之后还有其他与JSON序列化相关的错误和utf-8

An error occurred during JSON serialization of response: 'utf8' codec can't decode byte 0x93 in position 10: invalid start byte

我想补充一点,在使用命令chalice local

进行本地测试时,按预期工作

1 个答案:

答案 0 :(得分:0)

我们还遇到can't decode byte 0x93 in position 10: invalid start byte错误,结果是reportlab生成的PDF文件中的标题。在vim中打开时,PDF的前两行如下所示:

%PDF-1.4
%<93><8c><8b><9e> ReportLab Generated PDF document http://www.reportlab.com

我们的解决方法是改变我们在基于python的cgi脚本中将PDF发送到客户端的方式:

import codecs
print(codecs.open("/full/path/to/some.pdf", "r", encoding="utf-8", errors="ignore").read())

并且关键是errors="ignore" ... 丑陋且不好,我们已将此作为替换优先事项。