【问题标题】:Use AWS Chalice to generate PDF使用 AWS Chalice 生成 PDF
【发布时间】:2017-03-20 14:54:45
【问题描述】:

我正在寻找为我创建内部 API,这些 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 文件来传递“无模块”错误,但是在此之后还有其他与 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 进行本地测试时,它按预期工作

【问题讨论】:

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


    【解决方案1】:

    我们还收到了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" ... 又丑又坏,我们已将其作为优先替换。

    【讨论】:

    • “我们”是谁?你和OP在一起吗?
    • 不使用 OP,不。我们是一所研究型大学的工作人员,支持一个研究小组,该小组拥有一个由我们托管的基于 python 的 cgi 工作流。我们升级了他们(研究小组)使用的 Apache httpd 和 python,这导致 PDF 问题对用户可见,并且在追查这个问题时我们发现了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2016-03-19
    • 2020-12-26
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多