2017-11-18 17 views
0

私は、Javaの実践のための簡単な小さなテキストエディタを作ろうとしています。私は、テキストを入力するJavaFX 8のTextAreaを持っています。私は、テキストオブジェクトを作成して塗りつぶして、そのテキストオブジェクトをプリンタに送ることができるようにしたいと考えています。これまでのところ、私は悲惨に失敗しました。プリンタは空白の用紙を吐き出すだけです。印刷するコンテンツがないかのように動作します。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:さらに私はwrappingWidthプロパティを設定することをお勧めします); ' – c0der

+0

ありがとうございますが、そのノードを印刷したくありません。私は、テキストオブジェクトにノードの内容を塗りつぶし、それを印刷する指示に従っています。テキスト抽出されたテキスト=新しいテキスト(textDocument.getText());それは何らかの理由で動作しません。私はいくつかのテキストオブジェクトを印刷可能にする方法があります。 –

+0

'job.printPage(textDocument);'は動作しますか? – c0der

答えて

0

Textによって、それはノードの左下隅にない左上1を原点だ持っているようです。テキストは単に印刷された領域の内側にはありません。

幅の制限を設定しないため、2番目の試行では目的の出力が得られない可能性があります。

テキストの親としてStackPaneを使用すると、ノードが画面上にあることを確認できます。

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を設定する必要があります...

関連する問題