如何从Python以横向打印PDF文件?
我在用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')
,你会发现所有的对象都是不透明的。