2011-11-06 71 views
3

我使用的是Mac OSX,但我需要一个独立于平台的方法来打印PDF文件。 我在Matplotlib中创建了一个图表,并希望将其打印到我的打印机。如何使用Python从横向打印PDF文件到打印机?

我可以设置画布的方向以适应纵向版式:

fig.set_size_inches( 8.27,11.69) # set the figure size in inches 

但使用:

fig.set_size_inches(11.69, 8.27) 

打印裁剪肖像面向数字

我发现这对另一个帖子在这里:

import subprocess 
import shlex 

printfile='test.pdf' 
fig.savefig(printfile) 
proc=subprocess.Popen(shlex.split('lpr {f}'.format(f=printfile))) 

任何人都可以帮助我的代码格式设置打印方向为横向?

回答

2

我看过lpr -o landscape,但没有足够的经验知道它是否适用于所有打印机。

您可以在生成图像(如果它适合您的工作流程)时执行此操作,而不是在打印时更改方向。 matplotlib savefig命令允许您指定横向保存,但目前仅限于postscript。这不是问题,但是,因为我们可以轻松地将postscript文件转换为PDF格式。下面是一个例子。

在Python:

from pylab import * 
import numpy as np 

x = np.arange(0, 10, 0.1) 
y = np.sin(x) 
plot(x, y) 
xlabel('x') 
ylabel('y') 
savefig('img.eps', orientation='landscape') 

我离开了画布大小为方便和简洁。

现在我们有一个名为img.eps的文件。在shell中执行以下操作。

epstopdf img.eps 

下面是导致img.pdf文件看起来是这样的: Landscape image.

一个缺点要记住这种方法是后记不喜欢透明度,所以如果你想要的透明度,这不是办法为你。看看我的意思是以matplotlib patch_collection.py为例。将最后一行的pylab.show()替换为pylab.savefig('patch.pdf'),运行它,然后查看生成的PDF文件。它将看起来像例子中的图像。但是,如果你做pylab.savefig('patch.eps'),你会看到对象都是不透明的。

+0

谢谢您的回答,我能够打印“Image.eps”文件中直接使用:\t printfile = 'img.eps' # '检验.pdf' \t plt.savefig( 'img.eps',方向= 'landscape') \t proc = subprocess.Popen(shlex.split('lpr {f}'.format(f = printfile)))如何以编程方式执行epstopdf命令? – user1032355

+0

@ user1032355如果您想在在Python代码中,你可以添加'import subprocess'和'subprocess.call'('epstopdf img.eps',shell = True)'。 –

+0

再次感谢大卫的澄清,当我运行它时:/ bin/sh :epstopdf:command not found“在MAC OSX 10.6.8上,但你的后续行动澄清了对shell的调用格式。 – user1032355