首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印和graphics[]

打印和graphics[]
EN

Stack Overflow用户
提问于 2011-06-01 23:20:37
回答 2查看 1.3K关注 0票数 7

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

代码语言:javascript
复制
Graphics[{Rectangle[{0, 0}, {19, 28}], Orange, Rectangle[{0, 0}, {1, 1}]}]

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

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

我使用了AspectRatio->19/28ImageSize的各种设置,比如ImageSize->{19*27,28*27},但它总是不太准确。

我将图片导出为TIFF格式,然后用windows图片库打印出一整页的照片。有没有人有这方面的经验?必须有一个公式,而不是试错。

更新:我尝试了@Szabolcs的建议,并使用了以下代码:

代码语言:javascript
复制
   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是有效的值。我也玩过画框,但后来变得丑陋起来。还没有找到一种方法来获得正确的结果,而不是尝试所有可能的设置。应该做的是自己在选定的边界内创建框架/刻度等,但这不是我想要追求的道路。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-01 23:58:37

代码语言:javascript
复制
g = Graphics[{Rectangle[{0, 0}, {19, 28}], Orange, Rectangle[{0, 0}, {1, 1}]}]

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

代码语言:javascript
复制
Show[g, AspectRatio -> Automatic]

但这已经是默认设置了。

你需要做的第二件事是为你的绘图区选择一个大小和范围。让我们将其设置为21 x 30,矩形居中:

代码语言:javascript
复制
plotArea = {{0, 21}, {0, 30}} - {1, 1}
Show[g, AspectRatio -> Automatic, PlotRange -> plotArea]

您需要做的第三件事是关闭添加任何使图形的实际大小大于绘图范围的填充/边距:

代码语言:javascript
复制
final = Show[g, AspectRatio -> Automatic, PlotRange -> plotArea, PlotRangePadding -> 0, ImagePadding -> 0]

我相信ImageMargins不会有什么不同,但如果有,也将其设置为0。

您需要做的最后一件事是将其导出为保留图像尺寸的可打印格式,并设置图像的大小,以便1 cm将是绘图上的1个单位。Mathematica接受以打印机的点为单位的图像大小,因此让我们定义:

代码语言:javascript
复制
cm = 72/2.54
Export["final.pdf", Show[final, ImageSize -> 21 cm]]

我们想要21厘米宽的地块,因为它有21个单位宽。使用PDF作为导出格式,而不是TIFF。需要在Show内部使用ImageSize来解决Export的一些问题……

现在在Adobe Reader中打开PDF,打开打印对话框,并确保页面缩放设置为无!我不知道如何在其他读者中做到这一点。还要确保你的身材与纸张相符(21 * 30厘米对A4来说太大了……)

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

票数 9
EN

Stack Overflow用户

发布于 2011-06-01 23:33:24

我认为您需要添加PlotRangePadding -> None并适当设置图像尺寸。

在本例中,“边界框”的大小与较大的矩形相同:{19, 28}

一种健壮的方法是将ImageSize设置为实际所需的尺寸,并使用ImageResolution,它会将该值嵌入到TIFF文件中,以便正确打印:

代码语言:javascript
复制
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。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6203586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档