JavaFX 缩放打印弄乱了我的打印机

标签 java caching printing javafx scaling

我使用了一段非常简单的代码来打印 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。

然后,我尝试改编以下代码片段: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)。我已经重新启动了打印机。结果相同。

我尝试过从其他应用程序进行打印,到目前为止,它们似乎都打印得很好。

我猜测上面的代码片段以某种方式改变了缩放比例,并以某种方式将其与缓存中的这个应用程序关联起来。

问题

  1. 有人知道发生了什么事吗?
  2. 如果是缓存值
    1. 他们在哪里?
    2. 我该如何摆脱它们?

另外,不确定这是否与问题有关,但我开始在运行 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%)

我不知道这指的是什么,但它肯定是在打印时出现的。

预先感谢您提供的任何帮助。

...在首次发布此问题后相当长一段时间。

我检查了创建的作业:

I don't have enough reputation points to post the image of the stack trace. So here is a link to it.

很明显,与作业关联的打印机具有 defPageLayout,其纸张设置为“纸张:日本明信片尺寸=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 就可以正确打印了。但我似乎无法重置此应用程序的默认纸张尺寸。所有其他应用程序的默认纸张尺寸似乎都很好。

这个东西缓存在哪里?

最佳答案

解决方案

在 Mac 上,转到设置,删除打印机并将其重新添加到打印机列表中。不可否认,只有在重新添加打印机后,我才注意到“打印机和扫描仪系统”首选项 Pane 底部标有“默认纸张尺寸”的下拉菜单。我怀疑我可以在那里修复它。 :(

关于JavaFX 缩放打印弄乱了我的打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31085987/

相关文章:

java - Struts2 & Tiles : When apache. org 已关闭我的 webapp 无法启动

java - 带有 Java 8 Stream 的构建器模式

java - 在不打开 IO 流的情况下识别丢失的 Socket 连接

ios - 使用 SDWebImage 忽略查询参数

c# - 将报告 (RDLC) 设置为始终横向打印和 A4

java正则表达式问题

javascript - 如果将关系指定为链接,则防止 ember-data 从服务器重新加载关系

java - 我可以在不使用 ehcache 的情况下使 spring 缓存过期吗

python - python中的print函数是否有可以打印的字符串长度限制?

python - 脚本中的 Sympy Solver 不打印返回