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

#graphics #printing #wolfram-mathematica

#графика #печать #wolfram-mathematica

Вопрос:

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

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

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

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

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

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

ОБНОВЛЕНИЕ: я попробовал предложение @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}]]
  

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

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

Комментарии:

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

2. Печать в масштабе, выполняемая с масштабированием 72 точки на дюйм, как указано в приведенных ниже ответах (и в документах MMA), на самом деле никогда не работала для меня. Я обнаружил, что мне нужен дополнительный коэффициент масштабирования, который я определяю за несколько итерационных проходов (печать, измерение линейкой, настройка масштаба, печать и т.д.). Если я правильно помню, среда печати также уменьшает размер до 80% рабочей среды.

3. @Sjoerd, ты пробовал мой метод с экспортом растра?

4. @Mr.wizard У меня негативные чувства по поводу создания растровых дампов на векторном лазерном принтере; это не так, как это должно быть сделано. Но в прошлом я пробовал несколько форматов, и все они нуждались в корректировках.

5. @Sjoerd, я ценю желание сохранить все в векторном формате, но я спрашиваю, потому что, насколько я могу судить, размер правильный при использовании этого метода, и я хотел бы подтверждения.

Ответ №1:

 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, откройте диалоговое окно печать и убедитесь, что для параметра Масштабирование страницы установлено значение None! Я не знаю , как это сделать с другими читателями … Также убедитесь, что ваш рисунок помещается на бумаге (21 на 30 см слишком велик для формата А4 …).

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

Комментарии:

1. Хотите верьте, хотите нет, я не копировал ваше сообщение в своем обновлении, я работал над ним, пока вы публиковали.

2. Теперь последний вопрос заключается в том, как это сделать, сохраняя при этом видимый кадр на графике!! Вероятно, слишком много возни с заполнениями … Кстати, я думаю, что как дополнение изображений, так и дополнение графиков становятся актуальными только при наличии рамки / осей.

3. Кажется, что PlotRangePadding оставляет белую рамку на образце графики, и поэтому требуется. Я подумаю о проблеме с фреймом.

4. @Szabolcs Я еще немного поэкспериментирую на работе (не хочу много печатать дома ;)) Я буду держать вас в курсе своих выводов!

5. @Mr.Wizard: LevelScheme использует точки печати ( pt ). Почти все серьезные работы по набору текста выполняются в pt .

Ответ №2:

Я считаю, что вам нужно добавить 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, тем же методом.

Комментарии:

1. Работаю над этим, пока публикую! Я попробую ваше предложение, чтобы!