【发布时间】:2017-12-18 08:33:41
【问题描述】:
我正在使用 Python 2.7 和 Reportlab 创建 .pdf 文件,以便在我的应用引擎系统中显示/打印。如果这很重要,我正在使用 ndb.Model 来存储数据。
我能够在线为单个客户生成银行对账单的等价物。那是;用户点击屏幕上的“pdf”按钮,.pdf 语句就会出现在屏幕上的新选项卡中,就像它应该的那样。
我正在使用以下代码将 .pdf 文件成功保存到 Google Cloud Storage
buffer = StringIO.StringIO()
self.p = canvas.Canvas(buffer, pagesize=portrait(A4))
self.p.setLineWidth(0.5)
try:
# create .pdf of .csv data here
finally:
self.p.save()
pdfout = buffer.getvalue()
buffer.close()
filename = getgcsbucket() + '/InvestorStatement.pdf'
write_retry_params = gcs.RetryParams(backoff_factor=1.1)
try:
gcs_file = gcs.open(filename,
'w',
content_type='application/pdf',
retry_params=write_retry_params)
gcs_file.write(pdfout)
except:
logging.error(traceback.format_exc())
finally:
gcs_file.close()
我正在使用下面的代码来创建一个所有文件的列表以显示在屏幕上,它显示了上面存储的所有文件。
allfiles = []
bucket_name = getgcsbucket()
rfiles = gcs.listbucket(bucket_name)
for rfile in rfiles:
allfiles.append(rfile.filename)
return allfiles
我的屏幕 (html) 显示 ([Delete] 和文件名) 行。当用户点击【删除】按钮时,下面的删除代码sn -p 起作用(文件名是/bucket/filename,完成)
filename = self.request.get('filename')
try:
gcs.delete(filename)
except gcs.NotFoundError:
pass
我的问题 - 鉴于我在屏幕上有一个文件列表,我希望用户单击文件名并将该文件下载到用户的计算机。在 Google 的 Chrome 浏览器中,这将导致文件被下载,其名称显示在屏幕的左下方。
还有一点,上面的例子是针对 .pdf 文件的。我还必须在列表中显示 .csv 文件,并希望它们也被下载。我只想下载文件,不需要显示。
所以,我想要一个像...一样的sn-p
filename = self.request.get('filename')
try:
gcs.downloadtousercomputer(filename) ???
except gcs.NotFoundError:
pass
我想我已经尝试了在这里和其他地方能找到的一切。对不起,我已经啰嗦了。对我有什么提示吗?
【问题讨论】:
标签: python google-app-engine pdf