python和matplotlib服务器端生成.pdf文档

python和matplotlib服务器端生成.pdf文档,python,cgi,matplotlib,Python,Cgi,Matplotlib,我想编写一个生成.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") #ma

我想编写一个生成.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图片。(粗体字代表我在评论中尝试过的所有东西)

有人知道吗

谢谢


jean-claude我在这里只是猜测,但是应用程序/pdf,在评论行中,您没有在print语句中包含必要的额外换行符。

我在这里只是猜测,但是应用程序/pdf,在评论行中,您没有在print语句中包含必要的额外换行符。

首先,在代码中,您将print语句中的单词和图形本身发送给stdout

我刚刚尝试了你的脚本,更改了如下注释

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

这对我来说很好。我使用的是Python2.6.smth和matplolib 0.99。首先,在您发送给标准输出的代码中,您可以同时使用print语句中的单词和图形本身

我刚刚尝试了你的脚本,更改了如下注释

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

这对我来说很好。我使用的是Python2.6.smth和matplolib 0.99,你能描述一下当你尝试它时pdf输出失败的方式吗?当我使用这个:plt.savefig(sys.stdout,format='pdf')时,我得到:“文件已损坏,无法恢复”:当我使用这个:plt.savefig(sys.stdout.write('test6.pdf'),format='pdf'))我得到:文件不是以%PDF-开头的,请尝试用编辑器打开文件。我猜第一行应该是“Content-Type:image/png”(不带引号),只有这样它才会变成%PDF等等——这就是PDF文件应该如何开始的。它现在可以工作了!谢谢大家。你能描述一下你尝试pdf输出时失败的方式吗?当我使用这个:plt.savefig(sys.stdout,format='pdf')时,我得到:“文件已损坏,无法恢复”。当我使用这个:plt.savefig(sys.stdout.write('test6.pdf'),format='pdf')时,我得到:文件不以%pdf开头-'尝试用编辑器打开文件。我猜第一行应该是“Content-Type:image/png”(不带引号),只有这样它才会变成%PDF等等——这就是PDF文件应该如何开始的。它现在可以工作了!谢谢您的帮助。它可以工作,但只将.pdf文件保存在cgi bin目录中,这对任何事情都没有用处。@damiano:当然,因为您没有指定显式路径,所以它会保存到“当前”目录中。您想把它放在哪里,这取决于您的需要。它可以工作,但只将.pdf文件保存在cgi bin目录中,这对任何事情都没有用处。@damiano:当然,因为您没有指定显式路径,所以它会保存到“当前”目录中。你想把它放在哪里,这取决于你的需要。