我正在尝试使用JavaFX 8打印应用程序接口,但当我尝试打印包含任何3D内容的任何场景/节点时,我遇到了问题。我一直在这里和其他网站上寻找答案,但没有找到任何帮助。
如果节点仅包含2D内容,场景将在我选择的打印机上打印,而不会出现问题。但是如果我添加一个3D对象到场景中,整个东西都无法打印-没有任何错误,但没有任何内容。如果我打印到打印机,空白页被“打印”,如果我打印到文档打印机,我得到一个空文档。
我尝试使用AWT打印机制将节点转换为WritableImage,然后再转换为BufferedImage进行打印。这是因为它是打印出来的,但我们对它的质量并不满意。
在这个阶段,我的打印调用者是相当标准的-
private void doPrintFX() {
Printer printer = Printer.getDefaultPrinter();
PageLayout pageLayout = printer.createPageLayout(
Paper.A3, PageOrientation.LANDSCAPE, Printer.MarginType.DEFAULT);
final double scaleFactor = computeScaleFactor(pageLayout.getPrintableWidth(),
pageLayout.getPrintableHeight(),
sceneNode.getBoundsInParent().getWidth(),
sceneNode.getBoundsInParent().getHeight());
if (scaleFactor != 0) {
sceneNode.getTransforms().add(new Scale(scaleFactor, scaleFactor));
}
PrinterJob job = PrinterJob.createPrinterJob(printer);
if (job != null) {
System.out.println("Printing to " + job.getPrinter().getName());
boolean success = job.printPage(pageLayout, sceneNode);
if (success) {
job.endJob();
}
}
}我已经将节点缩小为一个非常简单的场景,其中包含几个矩形和一个圆柱体。我目前使用的代码是:
Cylinder cylinder = new Cylinder(50, 150);
cylinder.setLayoutX(250);
cylinder.setLayoutY(100);
canvas.getDrawingPane().getChildren().add(cylinder);
Rectangle item = new Rectangle(50, 50, 100, 50);
item.setStroke(Color.BLACK);
item.setFill(null);
canvas.getDrawingPane().getChildren().add(item);
item = new Rectangle(75, 75, 100, 50);
item.setStroke(Color.BLACK);
item.setFill(null);
canvas.getDrawingPane().getChildren().add(item);canvas.getDrawingPane是一个窗格,是发送给打印函数的内容。
有没有人能告诉我,我正在做的事情可能出了什么问题?JavaFX打印接口是否支持3D节点打印?谢谢。
发布于 2014-11-12 04:07:01
只是为其他可能感兴趣的人回答我自己的问题。
我发现FX 8不支持3D打印。它已经被放到了版本9中可能的增强。
https://stackoverflow.com/questions/26855492
复制相似问题