我如何在java中打印到打印机2个字符串

Posted

技术标签:

【中文标题】我如何在java中打印到打印机2个字符串【英文标题】:how do i print to a printer 2 strings in java 【发布时间】:2014-05-20 17:22:05 【问题描述】:

我会尽量让这件事变得简单

我正在尝试打印包含以下内容的账单:

String text="Home\n";
       text+="Sweet\n"+"Home";
String cut_page="((char)12)m"; //this string is just a reference

我想在打印机上打印字符串“text”并在打印“cut_page”之后立即打印。

我想按这个顺序做,因为连接对我没有用,因为出于某种原因它会在短语中间切开。


如果我使用的是真正的方法,如果上面的内容对你来说已经足够了,那么请忽略这部分

String param = request.getParameter("empresa");
    System.out.println("empresa");
    System.out.println(param);
    Gson gson = new Gson();
    String corte="m";
    DetalleImpresion detalle = gson.fromJson(param, DetalleImpresion.class);
    System.out.println(detalle);
    ArrayList<HashMap<String, Object>> detalles_factura = detalle.getDetalle_factura();

    String total = detalle.total;
    String direccion = detalle.direccion;
    String fecha = detalle.fecha;
    String facturacli = detalle.factura;
    String cliente = detalle.cliente;
    String empresa = detalle.empresa;
    String clienteNombre = detalle.cliente_nombre;
    String guia = detalle.guia_remision;

    String factura = empresa+"\t"+facturacli+"\n"+"\t"+fecha+"\n";
            factura+="\t"+clienteNombre+"\tRUC\n"+"\t"+direccion+"\n"+guia+"\n";//+"=======================================\n";

    for(int i=0; i< detalles_factura.size();i++)
        HashMap<String, Object> row = detalles_factura.get(i);      
        factura+=row.get("cantidad").toString() +"\t" + row.get("producto_nombre").toString()+
                "\t"+row.get("precio_unitario").toString()+"\t"+row.get("a_pagar").toString()+"\n";                 
       

    StringBuilder facfinal = new StringBuilder();
    facfinal.append(factura);
    facfinal.append(corte);
    String ff=facfinal.toString();
    //factura+=corte;

    String printerName = request.getParameter("dispositivo");
    System.out.println(printerName);
    AttributeSet attributeSet = new HashAttributeSet();
    attributeSet.add(new PrinterName(printerName, null));
    attributeSet = new HashAttributeSet();
    attributeSet.add(ColorSupported.NOT_SUPPORTED);
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, attributeSet);
    int indexOfEmpsonPrinter = -1;

    for( int i = 0 , count = services.length ;  i < count ; ++i )
        System.out.println(services[i].getName());
        if( services[i].getName().equals(printerName) )
            indexOfEmpsonPrinter = i;

        

    

    if(indexOfEmpsonPrinter!=-1)

        InputStream is = new ByteArrayInputStream(ff.getBytes("UTF8"));
        InputStream is2 = new ByteArrayInputStream(factura.getBytes("UTF8"));
        PrintRequestAttributeSet  pras = new HashPrintRequestAttributeSet();
        pras.add(new Copies(2));


        Doc doc = new SimpleDoc(is, flavor, null);
        Doc doc2 = new SimpleDoc(is2, flavor, null);
        DocPrintJob job = services[indexOfEmpsonPrinter].createPrintJob();

        try 
            job.print(doc, pras);
         catch (PrintException e) 
            e.printStackTrace();
        

        is.close();
        is2.close();
    
    else
        System.out.println("Impresora no encontrada");
    

【问题讨论】:

请只显示相关部分。您发布的整个业务逻辑使您更难隔离问题并为您提供帮助。 【参考方案1】:

来自DocFlavor API:

Java 打印服务实例不需要支持以下内容 打印数据格式和打印数据表示类。事实上,一个 使用此类的开发人员永远不应假设特定的打印 服务支持与这些预定义对应的文档类型 文档口味。

Java 可能会从您的打印作业中自动检测“text/plain”文档风格。我遇到的大多数打印机对此仅提供基本支持。

在您的情况下,我怀疑问题是打印机需要“\r\n”结束行而不是 Java 的“\n”。但更一般地说,如果您实际实现自己的 Printable 对象,您将对结果有更好的控制。

【讨论】:

以上是关于我如何在java中打印到打印机2个字符串的主要内容,如果未能解决你的问题,请参考以下文章

java中如何知道一个字符串中有多少个字,把每个字打印出来,举例

在 Java 中打印 Unicode 或补充字符

如何在不同步的情况下使用多个线程(2、4、8、16 个线程)循环打印字符串(10,100、1000 个循环)?

java中如果要连续打印相同的字符,如何书写 比如要打印8个空格 String indent=" "; System.out.println(in

Python - 如何在字符串中查找一个单词,然后只打印 x 个字母

Java面试题:交替打印字符串