如何从Python以横向打印PDF文件?

3 投票
1 回答
3981 浏览
提问于 2025-04-17 05:45

我在用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 这个命令,但我对它的了解不够,不确定它是否适用于所有打印机。

与其在打印时改变方向,不如在生成图像时就设置好方向(如果这样更符合你的工作流程)。matplotlib 的 savefig 命令允许你指定以横向格式保存,但目前只支持后记文件格式(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 的文件。在命令行中执行以下操作。

epstopdf img.eps

下面是生成的 img.pdf 文件的样子: 横向图像。

使用这种方法时需要注意的一个缺点是,后记文件不支持透明效果,所以如果你需要透明效果,这种方法就不适合你。为了更好地理解这一点,可以查看 matplotlib 的 patch_collection.py 示例。把最后一行的 pylab.show() 替换成 pylab.savefig('patch.pdf'),运行它,然后查看生成的 PDF 文件。它的样子会和示例中的图像一样。如果你用 pylab.savefig('patch.eps'),你会发现所有的对象都是不透明的。

撰写回答