62,615
社区成员
发帖
与我相关
我的任务
分享
package cn.jiudao.print;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.ArrayList;
import java.util.List;
public class PrintDraw implements Printable {
protected final static int billPrintWidth = 140;
protected final static int fontSize = 9;
protected final static int fontGap = 2;
protected final static int blankHeight = 30;
protected final static ArrayList<String> content = new ArrayList<String>();
protected final static Font defFont = new Font("Default", Font.BOLD, fontSize);
@Override
public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
if (page > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) g;
g2d.setFont(defFont);
System.out.println(content.get(0).length());
int indexY = 0;
for (String line : content) {
indexY += fontSize;
g2d.drawString(line, 0, indexY);
indexY += fontGap;
}
return PAGE_EXISTS;
}
public static void print(List<String> list){
content.clear();
content.addAll(list);
int height = content.size() * fontSize;
// 通俗理解就是书、文档
Book book = new Book();
// 打印格式
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT);
// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper();
p.setSize(billPrintWidth, height + blankHeight * 3);
p.setImageableArea(0, 0, billPrintWidth, height + blankHeight * 3);
pf.setPaper(p);
// 把 PageFormat 和 Printable 添加到书中,组成一个页面
book.append(new PrintDraw(), pf);
// 获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
// PrintService[] lookupPrintServices = PrinterJob.lookupPrintServices();
// DocPrintJob createPrintJob = lookupPrintServices[0].createPrintJob();
// createPrintJob.
job.setPageable(book);
try {
job.print();
} catch (PrinterException e) {
System.out.println("=======打印异常");
}
}
}
protected final static DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
private static PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();
public static void print(List<String> list) {
printJbo = defaultPrintService.createPrintJob();
content.clear();
content.addAll(list);
String data = "";
data += '\n';
data += '\n';
for (String line : list) {
data += line + '\n';
}
in = new ByteArrayInputStream(data.getBytes());
Doc doc = null;
doc = new SimpleDoc(in, flavor, null);
try {
printJbo.print(doc, null);
} catch (PrintException e) {
Util.logError("print fail!", e);
// e.printStackTrace();
} finally {
if(in != null)
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}