2014-11-11 3 views
2

Я пытаюсь использовать 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 поддержку печати трехмерных узлов? Спасибо.

+0

Вы можете попробовать задать этот вопрос на [список рассылки openjfx-DEV] (http://mail.openjdk.java.net/mailman/listinfo/openjfx-dev). – jewelsea

+0

Спасибо, драгоценности. Я тоже спросил там. – user1460563

+0

@jewelsea. вы слышали или знаете еще один хороший способ распечатать сценограф с 3d-узлами? –

ответ

1

Просто отвечая на мой собственный вопрос для всех, кто может быть заинтересован.

я обнаружил, что 3D-печать не поддерживается в FX 8. Было подавлено для возможного повышения для версии 9.

+0

Но спасибо за сообщение в любом случае. Это мой первый взгляд на печать кода, и он очень похож на печать в качелях. – Thorn

+0

Так нет ли способа улучшить разрешение bufferedImage? Есть ли какие-либо обновления о возможности печати или хранения в другом объекте буферизованного изображения для качественных 3D-узлов для печати? –

Смежные вопросы