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

时间:2015-06-27 06:43:15

标签: 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. 我如何摆脱它们?
  3. 另外,不确定这是否与问题有关,但我开始在运行java app的控制台中进行打印:

    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())调出页面布局面板。然后我能够看到Paper设置为“Postcard”,此时我将其更改为Standard US Letter,然后选择顶部下拉到Save as Default菜单项。但是,这并没有解决问题,每次运行时,默认值仍然是明信片。

    如果我首先创建新的页面布局,我确实成功地证明了问题可以得到纠正:

    Printer printer = Printer.getDefaultPrinter();
    PageLayout pageLayout = printer.createPageLayout(Paper.NA_LETTER, PageOrientation.PORTRAIT, Printer.MarginType.DEFAULT);
    

    然后,如果我在作业设置上设置新的页面布局:

    JobSettings jobSettings = job.getJobSettings();
    jobSettings.setPageLayout(pageLayout);
    

    然后WebView正确打印。但我似乎无法重置此应用程序的默认纸张大小。所有其他应用程序的默认纸张大小似乎没问题。

    这个东西缓存在哪里?

1 个答案:

答案 0 :(得分:1)

<强>解决方案

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