我的公司在开发一个零售系统,使用PrintService打印小票,打印是正确了
可是结尾出现一大段空行,我调用了PageFormat的setSize方法设置高度,
可是没起作用。我查了一下官方文档,可能是属性没有设置或者是打印格式
不对(我设置的是ISO_A4)。哪位大虾知道的请指点一下,最好是给出事例代码,必须是打印象超市小票的那种。本人在线等候回复!!
可是结尾出现一大段空行,我调用了PageFormat的setSize方法设置高度,
可是没起作用。我查了一下官方文档,可能是属性没有设置或者是打印格式
不对(我设置的是ISO_A4)。哪位大虾知道的请指点一下,最好是给出事例代码,必须是打印象超市小票的那种。本人在线等候回复!!
解决方案 »
- java如何过虑Active Directory中禁用的用户?
- 重大发现一个jdk的大bug!高人速来!
- GUI如何开发状态栏
- 明天到金碟面试java 请有没有有过到金碟面试经验的?
- 关于起名的问题
- 关于“TableHeader.cellBorder“
- 救急!!!!!!!!!!!!!!!!!!
- 要做一个在applet,实现可以托拽的图形(比如长方形和线段等)?那位高手有资料?或者有没有java的第三方类库实现此功能?
- 没人理我呀,5555555~~~~~~~~~~~~~~~~
- 各位请帮忙啊!下面的程序为什么老是出现"符号:类 AbstractTableModel 位置:类 in Demo TableModel tm=new AbstractTableModel()"的错误啊
- 在dos下编译下applet代码出错
- 向高手请教!关于Java中String的一些疑问
PrinterJob job = PrinterJob.getPrinterJob();
job.printDialog(null)
看看本地打印是否正确,正确的话研究下他的设置
public void print() throws Exception
{
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob job = printService.createPrintJob();
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocAttributeSet das = new HashDocAttributeSet();
javax.print.Doc doc = new javax.print.SimpleDoc(this, flavor, das);
try
{
job.print(doc,pras);
}catch(Exception pe)
{
throw pe;
}
}
}
请个位看看哪里有错误,为什么打印结尾一块空白区域
public int print(Graphics g, PageFormat pageFormat,
int pageIndex) throws PrinterException {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.black);
//对字体进行设置
int fontHeight=g2.getFontMetrics().getHeight();
int fontDesent=g2.getFontMetrics().getDescent(); //leave room for page number
double pageHeight =
pageFormat.getImageableHeight()-fontHeight;
double pageWidth =
pageFormat.getImageableWidth();
double tableWidth = (double)
tableView.getColumnModel(
).getTotalColumnWidth();
double scale = 1;
if (tableWidth >= pageWidth) {
scale = pageWidth / tableWidth;
} double headerHeightOnPage=
tableView.getTableHeader(
).getHeight()*scale;
double tableWidthOnPage=tableWidth*scale; double oneRowHeight=(tableView.getRowHeight()+
tableView.getRowMargin())*scale;
int numRowsOnAPage=
(int)((pageHeight-headerHeightOnPage)/
oneRowHeight);
double pageHeightForTable=oneRowHeight*
numRowsOnAPage;
int totalNumPages=
(int)Math.ceil((
(double)tableView.getRowCount())/
numRowsOnAPage);
if(pageIndex>=totalNumPages) {
return NO_SUCH_PAGE;
} g2.translate(pageFormat.getImageableX()+10,
pageFormat.getImageableY()-10);
//记录打印张数
g2.drawString("Page: "+(pageIndex+1)+" Copyright Asat",
(int)pageWidth/2-35, (int)(pageHeight
+fontHeight-fontDesent));
g2.translate(0f,headerHeightOnPage);
g2.translate(0f,-pageIndex*pageHeightForTable); //如果JTABLE比纸张大,对JTABLE进行缩小打印
if (pageIndex + 1 == totalNumPages) {
int lastRowPrinted =
numRowsOnAPage * pageIndex;
int numRowsLeft =
tableView.getRowCount()
- lastRowPrinted;
g2.setClip(0,
(int)(pageHeightForTable * pageIndex),
(int) Math.ceil(tableWidthOnPage),
(int) Math.ceil(oneRowHeight *
numRowsLeft));
}
//else clip to the entire area available.
else{
g2.setClip(0,
(int)(pageHeightForTable*pageIndex),
(int) Math.ceil(tableWidthOnPage),
(int) Math.ceil(pageHeightForTable));
} g2.scale(scale,scale);
//缩放操作
tableView.paint(g2);
//打印JTABLE的体
g2.scale(1/scale,1/scale);
g2.translate(0f,pageIndex*pageHeightForTable);
g2.translate(0f, -headerHeightOnPage);
g2.setClip(0, 0,
(int) Math.ceil(tableWidthOnPage),
(int)Math.ceil(headerHeightOnPage));
g2.scale(scale,scale);
tableView.getTableHeader().paint(g2);
//打印JTABLE的头 return Printable.PAGE_EXISTS;
//PrinterJob以Printable.PAGE_EXISTS来判断是否还需打印
}