【发布时间】:2019-06-28 18:42:19
【问题描述】:
我的程序打印 A6 尺寸的页面,但是我经常使用较大的纸张。在这种情况下,我想在 A6 虚拟页面周围打印一个边框来帮助我修剪纸张。但如果我使用实际的 A6 纸,我想要一个可行的解决方案。
我在 macOS 上运行。
我将 pageDialog() 配置为所需的页面大小(3.75 x 6.75 英寸)和完整大小的可成像区域。验证后返回的 PageFormat 与该大小和可成像区域匹配。
但是,当我的 Printable 被调用时,PageFormat 不同:纸张尺寸为 3.875 x 7.5 英寸,可成像区域为 3.375 x 6.55 英寸,左边距为 0.25 英寸,上边距为 0.2 英寸.我可以理解上边距,因为 8.5 x 11 英寸纸上的实际打印在纸的顶部。左边距不明显,因为实际打印是水平居中的。 (打印机显然知道纸张宽度,但也许软件不知道打印机会做什么?)
我画了边框:
double paperWidth = 3.75 * 72;
double paperHeight = 6.75 * 72;
g.draw(new Rectangle2D.Double(2, 2, paperWidth - 2, paperHeight - 2));
(2 是一个虚假因素。)
我得到的只是底部的一条细线,但侧面没有。 (我不关心顶部。)如果可成像区域导致剪裁,这是有道理的。
我已尝试更改可成像区域和剪辑区域,但没有任何改变。
pageFormat.getPaper().setImageableArea(0, 0, paperWidth, paperHeight);
g = (Graphics2D) g.create();
g.setClip(0, 0, (int) paperWidth, (int) paperHeight);
g.draw(new Rectangle2D.Double(2, 2, paperWidth - 2, paperHeight - 2));
g.dispose();
【问题讨论】: