我们在缩放监视器上使用Paperclips(SWT打印库)时遇到问题,但我不认为它与框架有关,而且与Eclipse环境有关。
让我们看一个例子:
左边是没有缩放(或100%)的打印,右边是在具有175%缩放率的显示器上开始的相同打印。我知道你在想什么:显示器及其分辨率/缩放应该对打印没有影响。对,应该。
虽然这很难过,但这并不是什么大问题。但是还有一个问题:上面的打印是由作为插件测试运行的JUnit测试用例生成的。如果我将它们作为常规单元测试运行两者工作。
显然,当在OSGi上下文中启动时,Eclipse环境中的某些东西的工作方式不同,我试图找出它是什么(所以我可以阻止它)。
我认为这是一个很好的谜题。
如果您需要提示SWT类可能是什么,我将其缩小到该文件的ScalePrint.java
(即如果我从我的演示中移除ScalePrint
的实例,表格显示正确;但标题仍然错误)。
我可以确认错误仅存在于Eclipse 4.6中,而不是4.5或3.7(这并不奇怪,因为4.6是第一个支持扩展的版本)。如果我将-Dswt.autoScale=100
添加到VM选项以禁用缩放,它也会按预期工作。
我可以追加我的测试用例,但正如我所说,我并不认为它与Paperclips本身有任何关系。
那么......与在普通Java应用程序中运行相同代码相比,什么可能会破坏整个Eclipse框架的扩展?
答案 0 :(得分:0)
问题是使用类Transform
,它本身使用静态字段DPIUtil.deviceZoom
(以DPIUtil.autoScaleUp(float dx)
的形式)。
由于DPIUtil.deviceZoom
是一个静态字段,因此当与具有缩放功能的主监视器一起使用时,一切都会失败(因为打印机不会这样做)。