这只是一个概念证明。
因此,程序只需确认打印的布局内容,然后将其发送到默认打印机。
因此,这个程序也非常简短和简单。刚好可以完成概念验证。
PrintCanvasExample2.java打印画布示例2.java
软件包com.example.demoticketprintapp;导入javafx.application。应用程序;导入javafx.print.*;导入javafx.sene。节点;导入javafx.sene。场景;导入javafx.scene.canvas。帆布;导入javafx.scene.canvas。图形上下文;导入javafx.scene.layout。StackPane;导入javafx.scene.paint。颜色;导入javafx.scene.text。字体;导入javafx.stage。阶段;公共类PrintCanvasExample2扩展应用程序{静态字符串发票;public static String getPrintableText(String[]产品){//标签文本=新标签();//text.setFont(Font.Font(“单间距规则”,FontWeight.LIGHT,11));StringBuilder StringBuilder=新的StringBuilder=();stringBuilder.append(“公司名称”);stringBuilder.append(“-----------------------------------------”+“\n”);stringBuilder.append(String.format(“%-24s%5s%10s\n”,“项目”,“数量”,“价格”);stringBuilder.append(String.format(“%-24s%5s%10s\n”,“----”,“-----”,“----------”);for(字符串产品:产品){stringBuilder.append(formatTemplateString(product,112500));}stringBuilder.append(“____________________________________________”+“\n”);stringBuilder.append(“净金额5000”+“\n”);stringBuilder.append(“____________________________________________”+“\n”);stringBuilder.append(“非常感谢!”+“\n”);//调试System.out.println(stringBuilder.toString());return stringBuilder.toString();}私有void打印(节点节点){打印机作业=打印机作业.createPrinterJob();if(作业!=空){//打印节点布尔打印=job.printPage(节点);if(打印){//结束打印机作业作业.endJob();}其他{System.out.println(“打印失败”);}}其他{System.out.println(“无法创建打印机作业。”);}}公共静态字符串格式TemplateString(String str,long num1,long num2){String formattedStr=String.format(“%-24s”,str);String formattedNum1=String.format(“%5d”,num1);String formattedNum2=String.format(“%10d”,num2);字符串rt=“”;如果(字符串长度()>25){if(字符串长度()<=44){rt=str+“\n”+“”.repeat(24)+“”+formattedNum1+“”+formattedNum2;}否则,如果(字符串长度()>44){字符串str1=str.substring(0,44);字符串str2=str.substring(44);rt=str1+“\n”+String.format(“%-24s”,str2)+“”+formattedNum1+“”+formattedNum2;}}其他{rt=格式化Str+“”+格式化Num1+“”+formattedNum2;}return rt+“\n”;}@覆盖公共无效启动(阶段primaryStage){Canvas Canvas=新Canvas(400,300);GraphicsContext gc=canvas.getGraphicsContext2D();gc.setFill(颜色.WHITE);gc.fillRect(0,0,canvas.getWidth(),canvas.getHeight());//设置字体//Linux操作系统gc.setFont(新字体(“单间距规则”,12));//WIndows公司//gc.setFont(新字体(“Courier new”,12));gc.setFill(颜色.BLACK);//绘制文本//gc.fillText(发票2、50、50);gc.fillText(发票,50,50);打印(画布);StackPane根=新StackPane();场景场景=新场景(root,400,300);primaryStage.setTitle(“打印画布示例”);primaryStage.setScene(场景);primaryStage.show();}公共静态void main(String[]args){String[]产品名称={“安卓”,“Mac OS”,“Windows 10操作系统”,“Linux操作系统”,“Windows服务器操作系统”};invoice=getPrintableText(productName);启动(args);}}
FormatTemlate:44字符宽度
- 如果项目名称长度>24,请将其保留在一行中
- 如果项目名称长度>44,请将其拆分为两行
公共静态字符串格式TemplateString(String str,long num1,long num2){String formattedStr=String.format(“%-24s”,str);String formattedNum1=String.format(“%5d”,num1);String formattedNum2=String.format(“%10d”,num2);字符串rt=“”;如果(字符串长度()>25){if(字符串长度()<=44){rt=str+“\n”+“”.repeat(24)+“”+formattedNum1+“”+formattedNum2;}否则,如果(字符串长度()>44){字符串str1=str.substring(0,44);字符串str2=str.substring(44);rt=str1+“\n”+String.format(“%-24s”,str2)+“”+formattedNum1+“”+formattedNum2;}}其他{rt=格式化Str+“”+格式化Num1+“”+formattedNum2;}return rt+“\n”;}
调试输出
公司名称-------------------------------------------物料数量价格---- ----- ----------安卓1 12500Mac OS 1 12500Windows 10操作系统1 12500Linux操作系统1 12500Windows Server OS 1 12500___________________________________________净金额5000___________________________________________非常感谢!
打印机输出:
- 如果项目名称长度>24&&<44,请将其保留在一行中
- 如果项目名称长度>44,请将其拆分为两行
Item name=“Windows 10 Operating System Windows 10 Operation System-long name”
JDK+JavaFX-祖鲁-21.0.3.fx-Zulu