печать и графика [] - PullRequest
       6

печать и графика []

7 голосов
/ 01 июня 2011

Я хотел бы нарисовать прямоугольник (или больше), который напечатан на бумаге, показывает прямоугольник в сантиметрах. Так

Graphics[{Rectangle[{0, 0}, {19, 28}], Orange, Rectangle[{0, 0}, {1, 1}]}]

будет распечатан в виде двух прямоугольников, размер которых может быть точно равен 1 см х 1 см (оранжевый), а черный - 19 х 28 см.

Кажется, что некоторые переменные важны: ImageSize и, конечно, AspectRatio.

Я использовал AspectRatio->19/28 и для ImageSize различные настройки, такие как ImageSize->{19*27,28*27}, но он остается не очень точным.

Я экспортирую графику в TIFF, а затем распечатываю с помощью фотогалереи Windows на фотографию на всю страницу. У кого-нибудь есть опыт с этим? Должна быть формула, а не метод проб и ошибок.

UPDATE: Я попробовал предложение @Szabolcs и использовал следующий код:

   g = Graphics[{White, EdgeForm[Directive[Thick, Black]], 
   Rectangle[{0, 0}, {18, 28}], Orange, Rectangle[{0, 0}, {10, 10}]}]

   final = Show[g, AspectRatio -> Automatic, 
   PlotRange -> {{-0.5, 18.5}, {-0.5, 28.5}}]

   cm = 72/2.54

   Export["final.pdf", Show[final, ImageSize -> {19 cm, 29 cm}]]

Это прекрасно работает. Оранжевый прямоугольник размером 10x10 см соответствует размеру 10x10 см

.

значение cm 72 / 2.54 оказалось не таким, как я ожидал, поскольку я использовал Windows 96dpi и Mac 72dpi (чтение с www). Однако 72 это значение, которое работает. Я также играл с кадрами, но потом это становится ужасным. Не удалось найти правильные результаты, несмотря на все возможные настройки. Что должно сработать, так это создать фреймы / галочки и т. Д. Внутри выбранных границ, но это не тот путь, по которому я хотел бы пойти ..

Ответы [ 2 ]

8 голосов
/ 01 июня 2011
g = Graphics[{Rectangle[{0, 0}, {19, 28}], Orange, Rectangle[{0, 0}, {1, 1}]}]

Хорошо, первое, что вам нужно сделать, это установить направления x и y для использования одинаковых единиц, что означает

Show[g, AspectRatio -> Automatic]

Но это уже значение по умолчанию.

Второе, что вам нужно сделать, это выбрать размер и диапазон для вашего участка.Давайте сделаем 21 на 30 с вашими прямоугольниками по центру:

plotArea = {{0, 21}, {0, 30}} - {1, 1}
Show[g, AspectRatio -> Automatic, PlotRange -> plotArea]

Третье, что вам нужно сделать, это отключить добавление любых отступов / полей, которые увеличивают фактический размер вашей фигуры по сравнению с диапазоном графика:

final = Show[g, AspectRatio -> Automatic, PlotRange -> plotArea, PlotRangePadding -> 0, ImagePadding -> 0]

Я полагаю, что ImageMargins не имеет значения, но если это так, установите также значение 0.

Последнее, что вам нужно сделать, это экспортировать это в формат для печатиэто сохраняет размеры изображения, и установите размер изображения так, чтобы 1 см был 1 единицей на вашем графике.Mathematica принимает размеры изображений в точках принтера, поэтому давайте определим:

cm = 72/2.54
Export["final.pdf", Show[final, ImageSize -> 21 cm]]

Мы хотим, чтобы график был шириной 21 см, потому что его ширина составляет 21 единицу.Используйте PDF как формат экспорта, а не TIFF.ImageSize необходимо использовать внутри Show, чтобы обойти некоторые проблемы с Export ...

Теперь откройте PDF в Adobe Reader, откройте диалоговое окно печати и убедитесь, что масштабирование страницыНет!Я не знаю, как это сделать в других читателях ... Также убедитесь, что ваша фигура соответствует размеру бумаги (21 на 30 см слишком велика для A4 ...)

Я не собираюсь делатьтестовый отпечаток, поэтому дайте мне знать, если это работает для вас :-) Размер PDF, сгенерированного таким образом, составляет точно 21 на 30 см, поэтому, если что-то пойдет не так, это должно произойти на этапе печати. ​​

4 голосов
/ 01 июня 2011

Полагаю, вам нужно добавить PlotRangePadding -> None и соответственно установить размеры изображения.

В этом случае размер «ограничивающего прямоугольника» совпадает с вашим большим прямоугольником: {19, 28}

Надежный способ сделать это - установить для ImageSize фактические требуемые размеры и использовать ImageResolution, что позволит встроить это значение в файл TIFF для правильной печати:

cm = 72 / 2.54;

g = Graphics[{Rectangle[{0, 0}, {19, 28}], Orange, 
      Rectangle[{0, 0}, {1, 1}]}, PlotRangePadding -> None, 
      ImageSize -> {19, 28}*cm];

Export["print.tif", g, ImageResolution -> 300]

Предполагается, что вы хотите печатать из растрового формата (TIFF), но вы также можете экспортировать в другие форматы, такие как PDF, тем же способом.

...