gpt4 book ai didi

JavaFx如何打印文本(仅)收据?

转载 作者:行者123 更新时间:2023-11-29 06:51:10 31 4
gpt4 key购买 nike

我正在构建一个销售点应用程序,我想打印一张收据。问题是我使用的打印机无法打印纯文本的任何图形,我在 javafx 中只能找到使用 Print API 打印节点或使用像 jasper 这样都包含图形的报告工具。

我要出示的收据是这样的 receipt

谢谢你的时间

最佳答案

这是一张来自 ESC/POS 打印机的便条。尽管可以使用操作系统打印服务在此类打印机上进行打印,但最好与其直接通信。

基本上,要打印文本就足以将其发送到打印机 + \n (0x0A)。这些打印机中有 2 种字体可以设置为有限的样式(双倍高度、双倍宽度、粗体、斜体、下划线……)。他们还支持不同类型的条形码(如有必要,他们自己计算校验和,并自己绘制条形码)。

它们的接口(interface)通常是RS232USB(Virtual RS - Vvirtual Serial P 排序)。

您可以使用 javax.comm在 java(fx) 应用程序上的此类打印机上打印的实现。我个人使用 RXTX .打印机的通信协议(protocol)通常是兼容的(至少在主流的文本打印中是这样),但并不能保证这一点。所以很高兴与您熟悉的模型一起工作。

这是在我工作的打印机上打印类似于您的笔记的示例。应用程序通常是java应用程序,但是使用这样的javafx打印方式是没有问题的。

package posprintdemo;

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.OutputStream;

public class POSPrintDemo {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
String portName = "/dev/ttyS4";
Integer baudrate = 57600;
Integer timeout = 1000;

SerialPort serialPort = (SerialPort)CommPortIdentifier.getPortIdentifier(portName).open(POSPrintDemo.class.getName(), 1000);
serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.enableReceiveTimeout(timeout);

try(OutputStream os = serialPort.getOutputStream()) {
// select double width and height font
os.write(new byte[] {0x1b, 0x21, 0x31});

os.write(" AROMA CAFE\n".getBytes());
os.write(" 1211 Green Street\n".getBytes());
os.write(" New York, NY\n".getBytes());

// select normal font
os.write(new byte[] {0x1b, 0x21, 0x01});

os.write("03-12-2016 1:11PM\n".getBytes());
os.write("TBL 1 HOST ALISON\n".getBytes());
os.write("VISA ######8281\n".getBytes());
os.write("\n".getBytes());
os.write("QTY DESC AMT\n".getBytes());
os.write("----------------------------------------------\n".getBytes());
os.write("1 GINGER CARROT SOUP $6.79\n".getBytes());
os.write("1 HOUSE SALAD $7.69\n".getBytes());
os.write("1 SURF AND RUTF - 1 PERS $48.79\n".getBytes());
os.write("1 WINE - GLASS - FIXE $11.50\n".getBytes());
os.write("1 CHOC CAKE $6.75\n".getBytes());
os.write("\n".getBytes());

// select double width and height font
os.write(new byte[] {0x1b, 0x21, 0x31});
os.write(" AMOUNT $90.52\n".getBytes());

os.write(new byte[] {0x1b, 0x21, 0x01});
os.write("\n".getBytes());
os.write(" SUB-TOTAL $81.52\n".getBytes());
os.write(" TAX $9.00\n".getBytes());
os.write(" BALANCE $90.52\n".getBytes());
os.write("\n".getBytes());
os.write("\n".getBytes());
os.write("\n".getBytes());

// center text
os.write(new byte[] {0x1b, 0x61, 0x31});

// set barcode height to 80px
os.write(new byte[] {0x1d, 0x68, 0x50});

// print CODE39 with text TEST
os.write(new byte[] {0x1d, 0x6b, 0x45, 0x04, 'T', 'E', 'S', 'T'});
os.flush();
}
}
}

这是收到的便条(打印在 57 毫米宽的纸上)

this is the note received

关于JavaFx如何打印文本(仅)收据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47906617/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com