此代碼不需要任何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()將它發送給打印機? –