0

我打算使用 Eclipse 和一个简单的 swing gui 来打印原始数据。我的条形码打印机使用.prn文件进行打印,所有文件都编码在文件中,所以如果我能设法将文件的确切内容作为原始数据发送到我的打印机,我可以让它打印出我想要的确切格式。我可以选择文件并使用StringBuffer它来读取其内容并写入字符串。现在我怎样才能设法将此字符串作为原始数据发送到我的打印机?

问候。

编辑:

也许我应该详细说明我的问题;现在它可以在 Windows 中使用;

    int ch;

            FileInputStream fin = null;
            try {
                fin = new FileInputStream(prnfile);
                while ((ch = fin.read()) != -1)
                    strContent.append((char) ch);
                fin.close();
                JOptionPane.showMessageDialog(frame, strContent);
            } catch (Exception e1) {
                System.out.println(e1);
            }



            try {

                PrintService service = PrintServiceLookup.lookupDefaultPrintService();
                JOptionPane.showMessageDialog(frame, service);




                DocPrintJob job = service.createPrintJob();
                InputStream is = new ByteArrayInputStream(strContent.toString().getBytes());




                DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

                Doc doc = new SimpleDoc(is, flavor, null);
                job.print(doc, null);

            is.close();

但是当我尝试在 Ubuntu 中运行它时,我只收到“打印取消,java 打印”通知,并且打印机什么也不做(通常我的打印机在 ubuntu 中使用cat xxx.prn | lpr终端工作。有什么想法吗?

4

1 回答 1

0

首先,按照评论将打印机创建为原始打印机。

其次,正如评论的那样,将您的文件读入字节数组,而不是 String 以避免将字节解码为 un​​icode。

第三,不要使用 defaultPrintService(),寻找特定的服务,指定我们将向打印机发送一个字节数组(原始数据)以确保目标打印机支持原始数据:

DocFlavor.byteFlavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
PrintServiceAttributeSet aset = new HashPrintServiceAttributeSet();
aset.add(new PrinterName(sPrinterName, null)); 
PrintService[] services = PrintServiceLookup.lookupPrintServices(byteFlavor, aset);

services[0] 应该是能够发送您的原始数据的服务。这对我有用。

于 2018-05-11T15:39:30.243 回答