2017-11-18 187 views
0

好的。我正在尝试为Java练习做一个简单的小文本编辑器。我在JavaFX 8中输入文本的TextArea。我希望能够创建并填充一个Text对象,然后将该文本对象发送给打印机。到目前为止,我失败了。打印机只是吐出一张白纸。它的行为好像没有内容需要打印。JavaFx转换和打印

我发现那里的文本对象被包裹在Java的TextFlow中像这样的例子..

TextFlow printArea = new TextFlow(new Text(textDocument.getText())); 

至少打印出一些东西,但输入的文字,这只是第一行。

这里是我的打印代码:

static void printOperation(TextArea textDocument) { 

    Text extractedText = new Text(textDocument.getText()); 
    PrinterJob printerJob = PrinterJob.createPrinterJob(); 

    if (printerJob != null && printerJob.showPageSetupDialog(textDocument.getScene().getWindow()) 
      && printerJob.showPrintDialog(textDocument.getScene().getWindow())) { 

     if (printerJob.printPage(extractedText)) { 
      printerJob.endJob(); 
     } else { 
      System.out.println("Failed to print"); 
     } 
    } else { 
     System.out.println("Canceled"); 
    } 
} 

//There is a print menu option that calls the print method 
     print.setOnAction((ActionEvent e) -> { 
      printOperation(textDocument); 
     }); 
+0

'job.printPage(textDocument );' – c0der

+0

谢谢,但我不想打印该节点。我按照说明使用节点的内容填充文本对象,然后打印该对象。 Text extractedText = new Text(textDocument.getText());由于某些原因,这不起作用。我必须做一些如何使该文本对象可打印。 –

+0

'job.printPage(textDocument);'工作吗? – c0der

回答

0

Text通过似乎有它在不左上角一个节点的左下角原点。文字根本不在印刷区域内。

第二次尝试可能无法达到所需的输出,因为您没有对宽度设置任何限制。

通过使用StackPane作为文本的父项,可以确保节点在屏幕上。此外,我建议您将wrappingWidth属性:

static void printOperation(TextArea textDocument) { 
    Text extractedText = new Text(textDocument.getText()); 
    extractedText.setWrappingWidth(450); 

    // use pane to place the text 
    StackPane container = new StackPane(extractedText); 
    container.setAlignment(Pos.TOP_LEFT); 

    PrinterJob printerJob = PrinterJob.createPrinterJob(); 

    if (printerJob != null && printerJob.showPageSetupDialog(textDocument.getScene().getWindow()) 
      && printerJob.showPrintDialog(textDocument.getScene().getWindow())) { 

     if (printerJob.printPage(container)) { 
      printerJob.endJob(); 
     } else { 
      System.out.println("Failed to print"); 
     } 
    } else { 
     System.out.println("Canceled"); 
    } 
} 

您应根据用户选择的,而不是硬编码,虽然值页面大小/保证金可能设置wrappingWidth ...