我想绘制一个印在纸上的矩形(或更多),以厘米为单位显示矩形。 所以
Graphics[{Rectangle[{0, 0}, {19, 28}], Orange, Rectangle[{0, 0}, {1, 1}]}]
将打印为两个矩形,可以精确测量为1cm x 1cm(橙色),黑色矩形为19x28 cm。
似乎有些变量很重要:
ImageSize
,当然还有AspectRatio
。
我使用了AspectRatio->19/28
和ImageSize
各种设置,例如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是有效的价值。 我也一直在玩框架,但后来变得丑陋。没有找到一种方法来获得正确的结果,以及所有可能的设置。应该在选定的边界内自己创建框架/刻度等,但这不是我想要追求的路径。
答案 0 :(得分:8)
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 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等其他格式。