java打印问题

equalman 2011-06-17 12:23:44
我现在需要做个打印程序 在预览的时候能一页一页的看到内容 而实际打印的时候文字却叠加在了一起 这个程序我是修改自一个别的程序 只是输出内容的方式不同

这是实现了Printable的类里的print方法
public int print(Graphics g,PageFormat pf,int page)throws PrinterException
{
Graphics2D g2=(Graphics2D)g;
g2.setPaint(Color.black);
g2.translate(pf.getImageableX(),pf.getImageableY());
if (operation.equals("Preview"))
drawCropMarks(g2,pf);
g2.clip(new Rectangle2D.Double(0,0,pf.getImageableWidth(),pf.getImageableHeight()));
//打印表格线
printTableFrame(g2,pf);
//打印表格内数据
printTableData(g2,pf,page);
return (page>=pageCount)?Printable.NO_SUCH_PAGE:Printable.PAGE_EXISTS;
}

这是打印的方法 会调用到上边的方法
PrinterJob printJob=PrinterJob.getPrinterJob();
printJob.setPageable(makeBook("print"));
if (printJob.printDialog())
{
try
{
printJob.print();
}
catch(Exception ee)
{
}
}
...全文
161 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
equalman 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qybao 的回复:]
makeBook("print")这个方法是如何处理的?
[/Quote]
DrawOut就是实现了Printable的类
equalman 2011-06-17
  • 打赏
  • 举报
回复

public Book makeBook(String operation)
{
Book book=new Book();
if(PrintFM.tableData.printTableFrame)
{
//先在PrintFM.tableFrameObjects累积打印表格的对象
PrintFM.printTable(PrintFM.tableFrameObjects,PrintFM.tableData.rowNum, PrintFM.tableData.columnNum
, (int)PrintFM.pageFormat.getImageableWidth(),(int)PrintFM.pageFormat.getImageableHeight());
}
pageCount=PrintFM.printData(PrintFM.objects, PrintFM.tableData.rowNum, PrintFM.tableData.columnNum
, (int)PrintFM.pageFormat.getImageableWidth(),(int)PrintFM.pageFormat.getImageableHeight());
DrawOut drawout=new DrawOut(PrintFM.tableFrameObjects,PrintFM.objects,operation,pageCount);
if (pageCount<=1)
{
nextBtt.setEnabled(false);
preBtt.setEnabled(false);
}
book.append(drawout,PrintFM.pageFormat,pageCount);
return book;
}
qybao 2011-06-17
  • 打赏
  • 举报
回复
makeBook("print")这个方法是如何处理的?
equalman 2011-06-17
  • 打赏
  • 举报
回复
大家帮忙看看啊 自己顶个
equalman 2011-06-17
  • 打赏
  • 举报
回复

这个是打印的效果 有点晕 咋会这样 我参考的那个程序 实际打印也是这个代码 我稍又改动原来是这样的

public int print(Graphics g,PageFormat pf,int page)throws PrinterException
{
Graphics2D g2=(Graphics2D)g;
g2.setPaint(Color.black);
g2.translate(pf.getImageableX(),pf.getImageableY());
if (str.equals("Preview"))
drawCropMarks(g2,pf);
g2.clip(new Rectangle2D.Double(0,0,pf.getImageableWidth(),pf.getImageableHeight()));
g2.translate(0,-page*pf.getImageableHeight());
int pages=getPageCount(g2,pf);
return (page>=pages)?Printable.NO_SUCH_PAGE:Printable.PAGE_EXISTS;
}
equalman 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qybao 的回复:]
引用 12 楼 equalman 的回复:
没协调好 应该是Graphics对象没弄好

是你画在同一个打印对象的内容发生重叠了。
[/Quote]
我把模板打印中打印表格线的对象列表 和打印表格中内容的列表 在点打印按钮时清空了一下就好了 总页数还是点打印时重新计算出来的页数 而实际对象数却是在预览的基础上增加了 我在打印时用对象列表里元素数目除以页数 造成每页显示对象数增加 在同一位置打印两个对象造成重叠 谢谢各位大哥了
qybao 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 equalman 的回复:]
没协调好 应该是Graphics对象没弄好
[/Quote]
是你画在同一个打印对象的内容发生重叠了。
equalman 2011-06-17
  • 打赏
  • 举报
回复
啊 我应该找到原因了 如果我打印前预览了 程序里的打印表格线的对象列表和打印内容的对象列表没有清空的问题 加上两句话就好了 正在思考 只是两个列表没清空 再次打印时再次执行Makebook函数 两个列表内容有加了一份。。。
equalman 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chennengqing 的回复:]
这种问题找打印机厂商要个案例过来就行了
[/Quote]
有可行的java代码能实现打印 应该是我程序那里没弄好 我找不出来
equalman 2011-06-17
  • 打赏
  • 举报
回复
没协调好 应该是Graphics对象没弄好
cnqing 2011-06-17
  • 打赏
  • 举报
回复
这种问题找打印机厂商要个案例过来就行了
equalman 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qybao 的回复:]
看上去你的DrawOut要处理多个打印对象,这里估计是你的PageFormat没协调好,以至同一个页面上打印多次信息了。你再好好查查DrawOut和Book的代码吧。
[/Quote]
哦 是会打印好多对象 我需要实现模板打印功能 每打印一个横线竖线 每移动一个位置都是对象 还有打印字符串也是对象 PageFormat没协调好??不是很懂 怎么会没协调好呢
qybao 2011-06-17
  • 打赏
  • 举报
回复
看上去你的DrawOut要处理多个打印对象,这里估计是你的PageFormat没协调好,以至同一个页面上打印多次信息了。你再好好查查DrawOut和Book的代码吧。
equalman 2011-06-17
  • 打赏
  • 举报
回复
用eclipse打开 点载入模板按钮 ->载入数据按钮 ->打印按钮
equalman2 2011-06-17
  • 打赏
  • 举报
回复
右键另存为 然后修改扩展名为rar 那位兄弟姐妹有时间能给看看 谢谢
equalman 2011-06-17
  • 打赏
  • 举报
回复
http://hi.csdn.net/attachment/201106/17/0_13082868722ZbT.gif
这是代码 来自网络 也就发出来 那位仁兄能给看看问题 试着打印输出到一个图片上就好 什么document image writer

62,614

社区成员

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

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