如何从Python中将PDF文件横向打印到打印机?

3

我正在使用Mac OSX,但我需要一种跨平台的方法来打印PDF文件。 我在Matplotlib中创建了一个图形,并想要将其打印到我的打印机上。

我可以通过以下方式设置画布的方向以适应纵向布局:

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)))

有人能帮我确定代码格式,以将打印方向设置为横向吗?

1个回答

2

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

与其在打印时更改方向,您可以在生成图像时进行更改(如果符合您的工作流程)。Matplotlibsavefig命令允许您指定以横向方向保存,但目前仅适用于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文件的样子: 横向图片 需要注意的一个缺点是,后处理不支持透明度,所以如果你需要透明度,这种方法并不适用。看看matplotlib的patch_collection.py例子就知道了。将最后一行的pylab.show()替换为pylab.savefig('patch.pdf'),运行它,然后查看生成的PDF文件。它会像例子中的图像一样。但是,如果你使用pylab.savefig('patch.eps'),你会发现对象都是不透明的。

谢谢您的回答,我已经能够直接打印“Image.eps”文件,使用以下代码:printfile='img.eps'#'test.pdf' plt.savefig('img.eps', orientation='landscape') proc=subprocess.Popen(shlex.split('lpr {f}'.format(f=printfile)))请问如何以编程方式执行epstopdf命令? - user1032355
如果你想在Python代码中实现,可以添加import subprocesssubprocess.call('epstopdf img.eps', shell=True) - David Alber
再次感谢David的解释。当我运行它时,在MAC OSX 10.6.8上出现了“:/bin/sh: epstopdf: command not found”的错误,但是你的后续解释澄清了对shell的调用格式。 - user1032355
@user1032355如果David的回答对你有用,你应该给他点个赞。作为原帖发布者,你可以两者兼顾:点赞并选择最佳答案。你会得到回报 :-) - joaquin
除非有人告诉我如何使用lpr,否则将选择David的答案。(感谢您关于投票的提示) - user1032355
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接