我想直接使用行式打印机进行打印,即点阵打印机,使用我的 JAVA 程序中的字体制表符回车和换行功能。我基本上知道如何从JAVA打印。我的问题是,在JAVA打印中我们首先生成要打印的页面的图形图像,然后将其发送到打印机进行打印。但我并不是在这些方面问我的问题。我想将文本作为字符流直接发送到打印机,并使用适用于打印机的回车、换行、制表符和打印机字体命令,就像过去使用激光或喷墨等图形打印机一样打印机未在使用中。
如果有人能在这些问题上指导我,我将不胜感激。提前致谢。
其他信息
一些评论建议从 JTextComponent 进行打印的简单方法。在这里,我们不必执行创建图形可打印的任务,该任务由 JTextComponent 自动处理,但我的问题是如何打印而不创建图形可打印。这意味着首先我从打印机中的可用字体中选择要使用的字体,说“courier”,然后我将“A”发送到打印机,打印机在“courier”中打印“A”,然后当我发送“B”时到打印机打印机打印“ express ”中的“B”,依此类推,直到我更改打印机中选定的字体。现在,在该行的末尾,我发送了\n 表示换行,这将使我的打印机的滚筒前进一行,并发送\r 表示回车,这将使我的打印机的打印头到达该行的开头。
为了澄清,我不想使用可打印接口(interface),因为该接口(interface)的打印方法基本上用于使用作为参数传递给打印方法的图形对象来生成图形图像。此后,JVM 将此图形对象发送到打印机以作为图像打印。这不是我想要的。我想使用行式打印机的字体功能和其他命令。
最佳答案
此代码不需要任何与 Swing
相关的组件,但仍然需要 awt
的 Graphics
类,但您可以从以下位置打印文本控制台没有显示任何 UI 组件,只是测试了一下:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.PageRanges;
public class DirectPrint implements Printable {
private PrintService[] printService;
private String text;
public DirectPrint() {
this.printService = PrinterJob.lookupPrintServices();
}
public static void main(String[] args) {
DirectPrint lt = new DirectPrint();
lt.printString("If this text gets printed, it will have worked! ;D");
}
public void printString(String input) {
this.text = input;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new PageRanges(1, 1));
aset.add(new Copies(1));
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
try {
printJob.setPrintService(getDefaultPrintService());
//index of installed printers on you system
//not sure if default-printer is always '0'
printJob.print(aset);
} catch (PrinterException err) {
System.err.println(err);
}
}
public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
Graphics2D g2 = (Graphics2D) g;
g2.translate(pf.getImageableX(), pf.getImageableY());
g.drawString(String.valueOf(this.text), 14, 14);
return PAGE_EXISTS;
}
}
方法 getDefaultPrintService()
可能返回 null,具体取决于您的系统。
来源:CodeRanch
** 编辑 **
经过进一步澄清,使用下面的代码,不涉及 Graphic 对象。
InputStream in = null;
try {
log.debug("preparing input stream");
in = getFileTobePrinted();
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
// find the printing service
log.debug("fetching print service");
AttributeSet attributeSet = new HashAttributeSet();
attributeSet.add(new PrinterName("lq2170", null));
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, attributeSet);
// create the print job
log.debug("creating print job");
DocPrintJob job = services[0].createPrintJob();
Doc doc = new SimpleDoc(in, flavor, null);
// monitor print job events
log.debug("preparing print job monitor");
PrintJobWatcher watcher = new PrintJobWatcher(job);
// print it
log.debug("start printing");
job.print(doc, null);
// wait for the print job is done
log.debug("waiting for the printing to finish");
watcher.waitForDone();
log.debug("done !");
} finally {
if (in != null) try { in.close(); } catch(Exception e) {}
}
找到Here
关于java - 如何使用打印机的字体直接从java使用行式打印机进行打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29507502/