印刷和图形[]

时间:2011-06-01 15:20:37

标签: graphics printing wolfram-mathematica

我想绘制一个印在纸上的矩形(或更多),以厘米为单位显示矩形。 所以

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

将打印为两个矩形,可以精确测量为1cm x 1cm(橙色),黑色矩形为19x28 cm。

似乎有些变量很重要: ImageSize,当然还有AspectRatio

我使用了AspectRatio->19/28ImageSize各种设置,例如ImageSize->{19*27,28*27},但它仍然不是很准确。

我将图形导出为TIFF,然后使用Windows照片库打印到整页照片。有任何人对此有经验吗?必须有一个公式而不是反复试验。

更新: 我尝试了@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}]]

这很有效。 10x10cm的橙色矩形是精确测量的10x10cm

cm 72 / 2.54值不是我预期的,因为我虽然Windows使用96dpi和Mac 72dpi(从www读取)。然而,72是有效的价值。 我也一直在玩框架,但后来变得丑陋。没有找到一种方法来获得正确的结果,以及所有可能的设置。应该在选定的边界内自己创建框架/刻度等,但这不是我想要追求的路径。

2 个答案:

答案 0 :(得分:8)

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

好的,您需要做的第一件事是设置xy方向以使用相同的单位,这意味着

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 cm在图上为1个单位。 Mathematica接受打印机点的图像尺寸,所以让我们定义:

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

我们希望该地块宽21厘米,因为它宽21个单位。使用PDF作为导出格式,而不是TIFF。需要在ImageSize内使用Show来解决Export ...

的一些问题

现在在Adobe Reader中打开PDF,打开打印对话框,确保Page Scaling设置为None!我不知道如何在其他读者中这样做...还要确保你的身材适合纸张(21 x 30厘米对​​于A4来说太大了)。

我不打算做测试打印,所以让我知道这是否适合你:-)这样生成的PDF大小正好是21 x 30厘米,所以如果出现问题,必须发生在印刷阶段。

答案 1 :(得分:4)

我认为您需要添加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等其他格式。