首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AWS Chalice生成PDF

使用AWS Chalice生成PDF
EN

Stack Overflow用户
提问于 2017-03-20 22:54:46
回答 1查看 604关注 0票数 1

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

代码语言:javascript
复制
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,打开调试后出现无法导入模块的错误

代码语言:javascript
复制
'app': No module named reportlab.pdfgen

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

代码语言:javascript
复制
An error occurred during JSON serialization of response: 'utf8' codec can't decode byte 0x93 in position 10: invalid start byte

我想补充的是,在使用命令chalice local进行本地测试时,它可以正常工作

EN

回答 1

Stack Overflow用户

发布于 2017-11-09 02:28:03

我们还得到了can't decode byte 0x93 in position 10: invalid start byte错误,它原来是由reportlab自己生成的PDF中的一个头文件。在vim中打开PDF时,其前两行如下所示:

代码语言:javascript
复制
%PDF-1.4
%<93><8c><8b><9e> ReportLab Generated PDF document http://www.reportlab.com

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

代码语言:javascript
复制
import codecs
print(codecs.open("/full/path/to/some.pdf", "r", encoding="utf-8", errors="ignore").read())

关键是errors="ignore" ..。这就是丑陋和糟糕的,我们已经把它作为优先替换的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42906859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档