Я пытаюсь использовать API печати JavaFX 8, и у меня возникают проблемы при попытке распечатать любую сцену/узел, содержащий любой 3D-контент. Я искал как здесь, так и другие сайты для ответа и не смог найти ничего, чтобы помочь.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 является Pane и то, что направляется к функции печати.
Может ли кто-нибудь сообщить, что может быть неправильно с тем, что я делаю? Поддерживает ли API печати JavaFX поддержку печати трехмерных узлов? Спасибо.
Вы можете попробовать задать этот вопрос на [список рассылки openjfx-DEV] (http://mail.openjdk.java.net/mailman/listinfo/openjfx-dev). – jewelsea
Спасибо, драгоценности. Я тоже спросил там. – user1460563
@jewelsea. вы слышали или знаете еще один хороший способ распечатать сценограф с 3d-узлами? –