【问题标题】:python and matplotlib server side to generate .pdf documentspython和matplotlib服务器端生成.pdf文档
【发布时间】:2011-04-20 01:10:36
【问题描述】:

我想编写一个生成 .pdf 文档的服务器端 python 脚本。

目前我在服务器端安装了 Python 2.7 并且 matplolib 也安装了服务器端。

创建简单绘图并生成 .png 图片的简单脚本 有效。

这是我使用的脚本:

# to access standard output :
import sys

# select a non-GUI backend :
import matplotlib

matplotlib.use('Agg')
#matplotlib.use("cairo.pdf")

#matplotlib.use('PDF')

# import plotting module :
import matplotlib.pyplot as plt

# generate the plot :
plt.plot([1,2,3,2,3,4])

# print the content type (what's the data type)

# the new line is embedded, using '\n' notation :
print "Content-Type: image/png\n"
# print "Content-Type: image/PDF\n"
# print "Content-type: application/pdf"

# output directly to webserver, as a png file:
plt.savefig(sys.stdout, format='png')
# plt.savefig(sys.stdout, format='PDF')
# plt.savefig( "test.pdf", format='pdf'  ) 

我想知道如何做同样的事情,但发送一个 pdf 文件而不是 一张png图片。 (# 或粗体字符代表我尝试并发表评论的所有内容)

有人知道吗?

谢谢。

让克劳德

【问题讨论】:

  • 您能描述一下您尝试时pdf输出失败的原因吗?
  • 当我使用这个时:plt.savefig(sys.stdout,format='pdf') 当我使用这个时,我得到:“文件已损坏,无法恢复”:plt.savefig (sys.stdout.write('test6.pdf'),format='pdf') 我得到:文件没有以 '%PDF-' 开始
  • 尝试使用编辑器打开文件。我猜第一行是“Content-Type: image/png”(不带引号),然后它才会变成 %PDF-etc --- 这就是 pdf 文件的开头。
  • 现在可以使用了!谢谢大家。

标签: python cgi matplotlib


【解决方案1】:

首先,在您的代码中,您将打印语句中的单词和图形本身发送到标准输出。

我刚刚试过你的脚本,像这样改变 cmets

# plt.savefig(sys.stdout, format='png')
# plt.savefig(sys.stdout, format='PDF')
plt.savefig( "test.pdf", format='pdf'  ) 

它对我来说很好用。我正在使用 python 2.6.smth 和 matplolib 0.99

【讨论】:

  • 它可以工作,但只能将 .pdf 文件保存在 cgi-bin 目录中,这对任何事情都没有用处。
  • @damiano:当然,因为您没有指定明确的路径,所以它保存到“当前”目录中。你想把它放在哪里,这取决于你的需要。
【解决方案2】:

我只是在这里猜测,但 correct MIME type 是 application/pdf,并且在该注释行中,您没有在 print 语句中包含必要的额外换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2020-08-09
    • 2010-09-14
    • 2020-06-27
    相关资源
    最近更新 更多