apache - 在 Python 3.7 中使用 CGI 渲染内联 PDF 时出错
问题描述
当使用 python CGI PDF 执行脚本时,它的提取效果很好。但是如果我在另一个模块中导入脚本无法获取 pdf。
import cgi
form = cgi.FieldStorage()
import os,io,html,sys
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
data = 'Create a new PDF with Reportlab Swamy® RedteK 4104 DE* ≤ 0.4 ≤ 1.5 *'
packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=letter)
strdata = data.encode('utf-8','xmlcharrefreplace')
cat = str(html.unescape(strdata.decode()))
can.drawString(10, 500, cat)
can.showPage()
can.save()
packet.seek(0)
print('Content-type: application/pdf')
print('Content-Disposition: inline; filename="out.pdf"')
print('\n\n')
sys.stdout.flush()
sys.__stdout__.buffer.write(packet.getvalue())
在另一个模块中导入时出错 apache 错误日志中的错误:脚本中的标头格式错误。错误的标题=%PDF-1.3:
谢谢,
解决方案
来自非 python 人的猜测:
print('Content-type: application/pdf')
print('Content-Disposition: inline; filename="out.pdf"')
print('\n\n')
看起来很可疑:每个 HTTP 标头后都需要换行:
print('Content-type: application/pdf')
print('\n')
print('Content-Disposition: inline; filename="out.pdf"')
print('\n\n')
正如您所说,您在日志中看到“脚本中的错误标头”:监视它们。我假设没有额外换行符的版本只是具有Content-Type
非常奇怪的内容类型的标题:
Content-type: application/pdfContent-Disposition: inline; filename="out.pdf"
而浏览器(和服务器)可以(并且应该)利用
Content-type: application/pdf
Content-Disposition: inline; filename="out.pdf"
推荐阅读
- android - 片段中的 WebView - 其他片段运行良好,但这会导致应用程序崩溃
- c# - 使用 windows-community-toolkit 的 Print Helper 扩展分页
- android - android studio 4 中的“adb.exe 已停止工作”错误
- amazon-web-services - Apex 域不会在 AWS SES 上验证
- typescript - 在 Typescript 中迭代“可迭代”
- python - 为什么我在使用多行引号时出现语法错误?
- r - Adding and Editing Functions of R-package
- python - Tkinter 多个窗口未在按钮单击时打开
- php - 用php创建动态超链接
- javascript - NodeJS Fs readdir不返回文件扩展名