我如何在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中如何知道一个字符串中有多少个字,把每个字打印出来,举例
如何在不同步的情况下使用多个线程(2、4、8、16 个线程)循环打印字符串(10,100、1000 个循环)?
java中如果要连续打印相同的字符,如何书写 比如要打印8个空格 String indent=" "; System.out.println(in