【发布时间】:2015-06-27 06:43:14
【问题描述】:
我正在使用一段非常简单的代码来打印 WebView:
public void print(final Node node) {
PrinterJob job = PrinterJob.createPrinterJob();
if (job != null) {
if(job.showPrintDialog(node.getScene().getWindow())){
_quoteView.getEngine().print(job);
job.endJob();
}
}
}
虽然效果不佳,但确实有效,将 webview 打印在大约两页纸上,但看起来像 WebView。
然后,我尝试修改我从中得到的以下代码 sn-p:http://java.dzone.com/articles/introduction-example-javafx-8
Printer printer = Printer.getDefaultPrinter();
PageLayout pageLayout = printer.createPageLayout(Paper.NA_LETTER,PageOrientation.PORTRAIT, Printer.MarginType.DEFAULT);
double scaleX = pageLayout.getPrintableWidth() / node.getBoundsInParent().getWidth();
double scaleY = pageLayout.getPrintableHeight() / node.getBoundsInParent().getHeight();
node.getTransforms().add(new Scale(scaleX, scaleY));
这不起作用,而且打印非常糟糕。好的,没有犯规,我只是将代码恢复到原来的样子。
问题
但是,现在,每当我使用恢复的代码运行应用程序时,缩放比例似乎会永久更改。我使用哪台打印机都没有关系,或者即使我只是打印到 PDF。我已经重新启动了我的计算机(最新的 Mac 操作系统)。我已重新启动打印机。结果一样。
我尝试过从其他应用程序打印,到目前为止,它们似乎都可以正常打印。
我猜上面的代码 sn-p 不知何故改变了缩放比例,并将它与缓存中的这个应用程序关联起来。
问题
- 有人知道发生了什么吗?
- 如果是缓存值
- 他们在哪里?
- 如何摆脱它们?
另外,不确定这是否与问题有关,但我开始在控制台中运行 java 应用程序进行打印:
Outstanding resource locks detected:
J2D Texture Pool: 1,105,920 used (0.4%), 1,105,920 managed (0.4%), 268,435,456 total
ES2 Vram Pool: 39,665,348 used (14.8%), 39,665,348 managed (14.8%), 268,435,456 total
47 total resources being managed
average resource age is 7.0 frames
0 resources at maximum supported age (0.0%)
5 resources marked permanent (10.6%)
3 resources have had mismatched locks (6.4%)
3 resources locked (6.4%)
23 resources contain interesting data (48.9%)
0 resources disappeared (0.0%)
我不知道这是指什么,但它肯定是为了响应打印而出现的。
提前感谢您提供的任何帮助。
....在这个问题最初发布之后相当长。
我检查了创建的作业:
我没有足够的声望点来发布堆栈跟踪的图像。 所以这是一个link。
很明显,与作业关联的打印机有一个 defPageLayout,其 Paper 设置为“Paper:Japanese Postcard size=100.0x148.0...”
这显然是打乱打印的原因。但是,我似乎无法重置它。
我使用job.showPageSetupDialog(node.getScene().getWindow()) 调出页面布局面板。然后我可以看到纸张设置为“明信片”,此时我将其更改为标准美国信函,然后选择顶部下拉菜单项保存为默认值。然而,这并没有解决问题,每次我运行它时,默认仍然是明信片。
如果我首先创建一个新的页面布局,我确实成功地证明了问题可以得到纠正:
Printer printer = Printer.getDefaultPrinter();
PageLayout pageLayout = printer.createPageLayout(Paper.NA_LETTER, PageOrientation.PORTRAIT, Printer.MarginType.DEFAULT);
那么,如果我在作业设置上设置新的页面布局:
JobSettings jobSettings = job.getJobSettings();
jobSettings.setPageLayout(pageLayout);
然后 WebView 打印正确。但我似乎无法重置此应用的默认纸张大小。所有其他应用程序的默认纸张大小似乎都很好。
这个东西缓存在哪里?
【问题讨论】:
标签: java caching printing javafx scaling