Java中的缩放图表以适应一页打印页面

4
我有一个使用Java和Graphics2D的图形工具。我想将生成的图形按比例缩放,以便在打印时恰好适合8.5 x 11页面(横向)。
我看到某个地方说页面缩放是以72分之一英寸为单位的,但我不确定这与屏幕dpi的关系如何。更复杂的是,我的屏幕工作在144dpi下,但该软件的大多数用户将使用72dpi或96dpi(不确定哪一个...?)。有没有人有管理所有这些dpi(包括打印)的经验?
使用java.awt.print包,我可以打印我的图形,但它们太大了,需要用几页纸。我可以使用Graphics.scale(double, double)进行缩放,但如何计算缩放因子以使图形适合一页纸?此外,Graphics.scale(double, double)是正确的工具吗?

在屏幕上,通常一个单位是一个屏幕像素。在打印机上,它可能是一个点(= 1/72英寸)。 - Paŭlo Ebermann
1
你在这里的问题到底是什么? - Paŭlo Ebermann
嗨Paŭlo - 这个图形工具可以创建适合我的屏幕的漂亮图表。但是,当我使用awt.print打印它们时,它会使用多个页面,我不希望用户使用胶带将页面粘在一起!因此,我想将图表缩放以适合一页。缩放函数似乎有效,但我不知道如何计算缩放因子。此外,我不确定scale(double,double)是否是适用于此工作的适当函数 - 是否有更适合此工作的打印属性?TIA - Paul Morrison
我把实际问题添加到了你的问题中。然而,我自己没有使用Java进行打印的经验。 - Paŭlo Ebermann
那么,也许Java是基于96个屏幕dpi计算的,而实际上它是144? - Paŭlo Ebermann
显示剩余3条评论
1个回答

1

我在网上找到了这段代码。我认为它可以解决你的问题。

Graphics2D g2d = (Graphics2D)g; 
//Scale the component to fit    
//Calculate the scale factor to fit the window to the page.
double scaleX = pageFormat.getImageableWidth();
double scaleY = pageFormat.getImageableHeight();
double scale = Math.min(scaleX,scaleY);  //Get minimum scale factor

希望能对你有所帮助。网页链接

祝好!


这将计算组件应该具有的大小,而不是比例因子。 - Paŭlo Ebermann
pageFormat.getImageableWidth()函数返回以1/72英寸为单位的宽度,pageFormat.getImageableHeight()函数返回高度,两者均可在PageFormat JavaDoc链接中找到。然后它们返回比例尺。此外,代码的最后一行选择最小比例因子,以便选择其中最佳的一个。 - Charliemops
它们返回绝对大小,这与比例因子(它将是两个大小之间的比率)完全不同。 - Paŭlo Ebermann
好的。我重新阅读了一遍,现在明白“1/72英寸”是度量单位。抱歉,由于我的英语水平,我混淆了解释。=S - Charliemops
我想将奖金分给这两位回答者,因为你们都帮助我找到了正确的方向 - 特别是 TheCharliemops!虽然我认为他/她的答案不是完整的,Marty Hall 的页面上有一些好东西 - 我能够在其中搜索 pageFormat.getImageableWidth,这让我找到了 JM Soan 的一个页面,它包含了更多的好东西:http://it.toolbox.com/wiki/index.php/How_to_print_in_Java!所以谢谢,伙计们 - 我想现在我在正确的轨道上了! - Paul Morrison
我访问了你发送的链接,现在我完全理解了解决方案。缩放因子是通过这个公式计算的 scale = pageFormat.getImageableWidth()/ printPane.getMinimumSize().getWidth() 并且使用函数 graphics2D.scale(scale,scale) 进行应用(根据JM Soan wiki)。感谢赏金,但我知道Paŭlo也同样值得它。 - Charliemops

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接