此代码不需要任何Swing
相关的部分,但仍然需要Graphics
类awt
,但你可以打印从控制台没有显示任何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
** EDIT **
进一步澄清后,用下面的代码,有正在不涉及图形对象。
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的图形打印,这不能解决我的问题。 – Blip
[可能会帮助你](https://docs.oracle.com/javase/tutorial/uiswing/misc/printtext。html) –
您是否尝试过'JTextPane'类的方法'setText(“hello”)'并使用print()将它发送给打印机? –