gpt4 book ai didi

java - 如何使用打印机的字体直接从 java 使用行式打印机进行打印?

转载 作者:行者123 更新时间:2023-11-30 08:54:13 24 4
gpt4 key购买 nike

我想使用行式打印机直接打印,即使用我的 JAVA 程序中的字体制表符回车和换行功能的点阵打印机。我基本上知道如何从JAVA打印。我的问题是,在JAVA打印中我们先生成要打印页面的图形图像,然后将其发送到打印机进行打印。但我不是在这些方面提出我的问题。我想直接将文本作为字符流发送到打印机,并使用打印机的回车、换行、制表符和打印机字体的适用命令,就像过去使用激光或喷墨等图形打印机一样打印机未在使用中。

如果有人能在这些方面指导我,我将不胜感激。提前致谢。

附加信息

一些评论建议从 JTextComponent 打印的简单方法。在这里,我们不必完成由 JTextComponent 自动处理的创建图形可打印任务,但我的问题是如何打印而不创建图形可打印。这意味着首先我从打印机的可用字体中选择要使用的字体说“courier”,然后我将“A”发送到打印机并且打印机在“c​​ourier”中打印“A”,然后当我发送“B”时到打印机,打印机打印“Courier”中的“B”等,直到我更改打印机中的选定字体。现在在该行的末尾,我发送\n 进行换行,这将使我的打印机的滚筒前进一行,并发送\r 进行回车,这将使我的打印机的打印头到达该行的开头。

澄清一下,我不想使用可打印接口(interface),因为此接口(interface)的打印方法基本上用于使用作为参数传递给打印方法的图形对象来生成图形图像。此后,JVM 将此图形对象发送到打印机以作为图像打印。这不是我想要的。我想使用行式打印机的字体和其他命令的功能。

最佳答案

此代码不需要任何 Swing 相关组件,但仍然需要 awtGraphics 类,但您可以从console 没有显示 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/

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