JavaFX 8 - 打印 3d 场景

标签 java printing javafx-8

我正在尝试使用 JavaFX 8 打印 API,但在尝试打印包含任何类型 3D 内容的任何场景/节点时遇到了问题。我一直在此处和其他网站上搜索答案,但未能找到任何帮助。

如果节点仅包含 2D 内容,场景将在我选择的打印机上打印而不会出现问题。但是,如果我将单个 3D 对象添加到场景中,整个对象将无法打印 - 没有任何错误但没有任何内容。如果我正在打印到打印机,则会“打印”空白页;如果我正在打印到文档打印机,则会得到一个空文档。

我曾尝试使用 AWT 打印机制将节点转换为 WritableImage,然后再转换为 BufferedImage 以进行打印。这是可行的,因为它可以打印,但我们对从中获得的质量不满意。

我的 print caller 在这个阶段是相当标准的 -

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 是一个 Pane,是发送到打印函数的内容。

任何人都可以告诉我我在做什么可能有什么问题吗? JavaFX 打印 API 是否支持打印 3D 节点?谢谢。

最佳答案

只是为可能感兴趣的其他人回答我自己的问题。

我发现 FX 8 不支持 3D 打印。它已被删除,以便对版本 9 进行可能的增强。

关于JavaFX 8 - 打印 3d 场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855492/

相关文章:

java - Xmlpull Java,解析互联网上的xml文件

java - 在 JMeter 的 BeanShell 采样器中将字符串解析为整数

java - 如何改变图形的大小

java - 打印 ByteArrayOutputStream 对象

java - 如何使用 JavaFX 中的 JCSG 库将 MeshView 转换为 CSG 对象

javafx-8 - 按下关闭按钮时 Java FX 中的关闭事件

Java 8 更新 162 javax.net.ssl.sslexception 收到致命警报 unexpected_message

c# - 将文本框值作为 C#.net 中的参数传递给 RDLC 报告

css - Internet Explorer 11 打印在右侧剪切文本

java - 如何将变量从 Controller 代码传递到 fxml View ?