2016-04-11 28 views
4

プリンタにテキストを送信しようとしています。私は、テキストだけを印刷し、ページ余白にラップし、必要に応じて別のページに移動する必要があります。印刷を終わる何テキストのみを印刷するにはどうすればよいですか?

@FXML 
private void print() { 
    TextArea printArea = new TextArea(textArea.getText()); 
    printArea.setWrapText(true); 
    printArea.getChildrenUnmodifiable().forEach(node -> node.setStyle("-fx-background-color: transparent")); 
    printArea.setStyle("-fx-background-color: transparent"); 

    PrinterJob printerJob = PrinterJob.createPrinterJob(); 

    if (printerJob != null && printerJob.showPrintDialog(textArea.getScene().getWindow())) { 
     if (printerJob.printPage(printArea)) { 
      printerJob.endJob(); 
      // done printing 
     } else { 
      // failed to print 
     } 
    } else { 
     // failed to get printer job or failed to show print dialog 
    } 
} 

は、スクロールバーと一緒に、コントロール自体であるように思わ灰色の背景である:

は、ここで私が今やっているかの最小限の例です。私はこれに間違った方法で近づいていますか?私は、印刷するテキストを送信するのではなく、コントロールを調整して印刷することで、APIと戦っているように感じています。

以下の画像例は携帯電話のカメラから撮ったものです。白い紙が少し明るい灰色に見えますが、コントロールとスクロールバーから灰色の背景が見えます。代わりのTextAreaの

example image of print result

答えて

3

TextFlow印刷:のTextFlowののmaxWidthは、印刷ダイアログが表示された後、PrinterJobをのページレイアウトを使用して設定する必要があることを

private void print() { 
    TextFlow printArea = new TextFlow(new Text(textArea.getText())); 

    PrinterJob printerJob = PrinterJob.createPrinterJob(); 

    if (printerJob != null && printerJob.showPrintDialog(textArea.getScene().getWindow())) { 
     PageLayout pageLayout = printerJob.getJobSettings().getPageLayout(); 
     printArea.setMaxWidth(pageLayout.getPrintableWidth()); 

     if (printerJob.printPage(printArea)) { 
      printerJob.endJob(); 
      // done printing 
     } else { 
      System.out.println("Failed to print"); 
     } 
    } else { 
     System.out.println("Canceled"); 
    } 
} 

お知らせ。

関連する問題