急救!!!PrintService打印的问题

linenqin 2007-01-09 07:49:35
我的公司在开发一个零售系统,使用PrintService打印小票,打印是正确了
可是结尾出现一大段空行,我调用了PageFormat的setSize方法设置高度,
可是没起作用。我查了一下官方文档,可能是属性没有设置或者是打印格式
不对(我设置的是ISO_A4)。

哪位大虾知道的请指点一下,最好是给出事例代码,必须是打印象超市小票的那种。本人在线等候回复!!
...全文
1105 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaoxue85 2007-01-10
  • 打赏
  • 举报
回复
打印的东西不同,我打印的是个TABLE,PRINT贴出来,让LZ参考下吧
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来判断是否还需打印
}
xiaoyetao08 2007-01-10
  • 打赏
  • 举报
回复
后面加0试试
linenqin 2007-01-10
  • 打赏
  • 举报
回复
我现在的问题是打印的纸大小没办法设置,就算一页只有几行,也会打印出一张A4长度的纸张,造成纸张浪费。Paper的setSize方法是可以改变纸张的长度,但是调用该方法后成像区域不在正常位置,就算手动设置成像区域也不起作用。
linenqin 2007-01-09
  • 打赏
  • 举报
回复
我的实现代码如下:
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;
 }
 }
}
请个位看看哪里有错误,为什么打印结尾一块空白区域
lixiaoxue85 2007-01-09
  • 打赏
  • 举报
回复
代码? 超市票据没打印过~如果是打印设置不对
PrinterJob job = PrinterJob.getPrinterJob();
job.printDialog(null)
看看本地打印是否正确,正确的话研究下他的设置
linenqin 2007-01-09
  • 打赏
  • 举报
回复
为什么没有人回答我呢?
linenqin 2007-01-09
  • 打赏
  • 举报
回复

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧