JavaFX printerPage(布局,节点)不打印文本流
我正在尝试打印格式化文本。 这是我的密码:JavaFX printerPage(布局,节点)不打印文本流,javafx,printing,textflow,Javafx,Printing,Textflow,我正在尝试打印格式化文本。 这是我的密码: public class ProvaTextFlow { public static void main(String[] args) { ProvaTextFlow p = new ProvaTextFlow() ; Node tf = p.creaTesto(); p.stampa(tf); } public Node creaTesto( ) {
public class ProvaTextFlow {
public static void main(String[] args)
{
ProvaTextFlow p = new ProvaTextFlow() ;
Node tf = p.creaTesto();
p.stampa(tf);
}
public Node creaTesto( )
{
String s1 = "Dear Mom," + "\n"
+ " I am going out dancing tonight with :" + "\n\n\n" ;
String f1 = " (girl) friend 1" + "\n" +
" friend 2" + "\n" +
" (girl) friend 3" + "\n\n\n\n" ;
String closing = "don't wait for me" + "\n\n\n\n"
+ "bye" + "\n\n" ;
Text t1 = new Text (s1);
Text t2 = new Text (f1);
Text t3 = new Text (closing) ;
t1.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
t2.setFont(Font.font("Tahoma", FontWeight.BOLD, FontPosture.ITALIC, 20));
t3.setFont(Font.font("Tahoma", FontPosture.ITALIC, 20));
TextFlow textFlow = new TextFlow() ; ;
try {
//Setting the width
textFlow.setPrefSize(2480, 3508); // 2480 X 3508 = A4(300)
//Setting the line spacing
textFlow.setLineSpacing(5.0);
//Retrieving the observable list of the TextFlow Pane
textFlow.getChildren().addAll(t1, t2, t3);
// method to extract out of a TextFlow the String text.
//
//////////////////////
// StringBuilder sb = new StringBuilder();
// for (Node node : textFlow.getChildren())
// {
// if (node instanceof Text)
// {
// sb.append(((Text) node).getText());
// }
// }
// String fullText = sb.toString();
/////////////////////////
// System.out.println("fulltext => " + fullText);
// this (when uncommented) correctly prints the unformatted text } catch (Exception e) {
System.out.println(e);
}
return textFlow;
}
public void stampa (Node n2p)
{
Printer printer = Printer.getDefaultPrinter();
javafx.print.PageLayout pageLayout = printer.createPageLayout
(
Paper.A4,
PageOrientation.PORTRAIT,
Printer.MarginType.DEFAULT
);
PrinterJob job = PrinterJob.createPrinterJob();
boolean result = job.printPage(pageLayout, n2p);
System.out.println(" print result => " + result);// this gives true
job.endJob();
}
}
此代码编译并正确运行,job.printPage()
返回true
,打印机开始打印,但A4纸张是空白的。
基本上,我构建了一个TextFlow
,其中三个字符串的格式各不相同,然后我将这个(TextFlow
)节点传递给Stampa
方法。
如果我打印一个表格视图
,一点问题都没有。
我错过什么了吗?
谢谢看起来您缺少一些代码?这是一个JavaFX
程序吗?如果是这样的话,你似乎缺少了这个项目的基本结构。这是一个更广泛的项目的一部分。GUI(FX应用程序)管理一些信息(关于我必须服用的药丸),然后有一种方法格式化文本以打印列表。同样的文本可以通过电子邮件发送。因此,是的,它是一个FX应用程序,但这只是其中的一部分。在这种情况下,您的程序有多少个public static void main
?这只是一个副类,不是一个确定的类,用于试验FX打印功能。如果我将TextFlow放在VBox中,它会毫无问题地显示出来,我的应用程序中只有一个主方法,图形用户界面。我试图实现的打印逻辑将位于文件菜单的打印菜单项中,其本身位于选项卡式窗格中。此外,我在主应用程序中测试了这两种方法(Createsto和Stampa),它们的行为是相同的。所以,我提交了一个问题和一个任何人都可以玩的代码,希望得到正确的答案。谢谢,亲爱的塞德里克,你说得对。我从ProvaTextFlow类中删除了main()方法,并从FX应用程序中调用了它的方法。它现在正在工作。非常感谢你的建议。