Как напечатать файл PDF на принтере в альбомной ориентации из Python? - PullRequest
3 голосов
/ 06 ноября 2011

Я использую 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 голосов
/ 06 ноября 2011

Я видел 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.В оболочке выполните следующее.

epstopdf img.eps

Вот как выглядит итоговый файл img.pdf: Landscape image.

Один недостаток, который следует учитывать при таком подходе, заключается в том, что postscript делаетне нравится прозрачность, поэтому, если вы хотите прозрачности, это не подход для вас.Чтобы понять, что я имею в виду, возьмем пример matplotlib patch_collection.py .Замените pylab.show() в последней строке на pylab.savefig('patch.pdf'), запустите его, а затем посмотрите на полученный PDF-файл.Это будет похоже на изображение в примере.Однако, если вы сделаете pylab.savefig('patch.eps'), вы увидите, что все объекты непрозрачны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...