我要打印格式控制为: aa aa aa aa aaa aaa aaaa a aa aa aa aaa aaa aaaa aa aa aa aaa aaa aaaa a 也就是说,第一行可能只有一点,第二行和第三行有可能不大一样 是不是从继承来的public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException 里面控制???
为什么要用print方法控制打印格式呢? 我上面的 class SinglePagePrint可以打印任何可视化的组件, 你可将要打印的内容先输出到一个Panel中,再用SinglePagePrint 把Panel打印出来
import javax.swing.*;
import java.awt.HeadlessException;
import java.awt.event.*;
import java.awt.print.*;public class Test extends JFrame
{
JButton b_print = new JButton("打印");
public Test() throws HeadlessException
{
setSize(300, 300);
b_print.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printerJob.defaultPage();
PrintTest printTest = new PrintTest();
pageFormat.setOrientation(PageFormat.PORTRAIT);
printerJob.setPrintable(printTest, pageFormat); if (printerJob.printDialog()) {
try {
printerJob.print();
}
catch (PrinterException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "出错了:" + ex.getMessage(),
"错误", JOptionPane.ERROR_MESSAGE);
}
} }
}); this.getContentPane().add(b_print);
setDefaultCloseOperation(this.EXIT_ON_CLOSE); }
public static void main(String[] args) throws HeadlessException
{
Test test1 = new Test();
test1.show();
}}import java.awt.print.Printable;
import java.awt.print.PageFormat;
import java.awt.Graphics;public class PrintTest implements Printable
{
public PrintTest()
{
} /**
* 重载的print方法,使用graphics绘制要打印的数据,参数说明参见父类的print方法
* @param graphics
* @param pageFormat
* @param pageIndex
* @return
* @throws java.awt.print.PrinterException
*/
public int print(Graphics graphics, PageFormat pageFormat,
int pageIndex) throws java.awt.print.PrinterException
{
//转变打印范围为pageFormat的可打印范围
graphics.translate( (int)pageFormat.getImageableX(),
(int)pageFormat.getImageableY()); if(pageIndex == 0){
graphics.drawString("第一页", 20, 20);
return PAGE_EXISTS;
}else if(pageIndex == 1){
graphics.drawString("第二页", 20, 20);
return PAGE_EXISTS;
}
return NO_SUCH_PAGE;
}}
import java.awt.print.*;public class SinglePagePrint
extends Thread {
Component myComponent;
public SinglePagePrint(Component component)
{
this.myComponent = component;
} public void run()
{
PrinterJob job = PrinterJob.getPrinterJob();
Book book = new Book();
PageFormat pf = job.pageDialog(job.defaultPage());
DoSinglePrint pff = new DoSinglePrint(this.myComponent);
book.append(pff, pf, 1);
job.setPageable(book);
if (job.printDialog()) {
try {
job.print();
}
catch (PrinterException e) {
e.printStackTrace();
}
}
}
}
package Tools;import java.awt.*;
import java.awt.print.*;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class DoSinglePrint
implements Printable {
Component myComponent;
public DoSinglePrint(Component component)
{
this.myComponent = component;
} public int print(Graphics g, PageFormat pf, int pageIndex)
throws PrinterException
{
if (pageIndex > 1) {
return Printable.NO_SUCH_PAGE;
}
else {
Graphics2D g2 = (Graphics2D) g;
double scale = 1;
double sc1 = pf.getImageableWidth() / myComponent.getWidth();
double sc2 = pf.getImageableHeight() / myComponent.getHeight();
double sc = Math.min(sc1, sc2);
if (sc < 1) {
scale = sc;
}
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.scale(scale, scale);
this.myComponent.paint(g2);
return Printable.PAGE_EXISTS;
}
}
}
一个单页打印程序具体用法如下:
new SinglePagePrint(this.WellCanvas).start();
aa
aa aa aa aaa aaa aaaa a
aa aa aa aaa aaa aaaa
aa aa aa aaa aaa aaaa a
也就是说,第一行可能只有一点,第二行和第三行有可能不大一样
是不是从继承来的public int print(Graphics g, PageFormat pf, int pageIndex)
throws PrinterException
里面控制???
import java.awt.HeadlessException;
对于你的要求,用crazyboy123(狂徒)的方法更好些,不过对于一些复杂的打印,就不能达到效果了
上面的代码只是一个单页可自动缩小的打印组件,其他自适应多页打印和长图连续打印组件代码太长,使用比较复杂我就不贴出来了。
你能具体说一下你要做什么吗?实现什么样的功能
,应该是很难做吧!
你们公司还要不要人啊?我来打工行不行?说真的
呵呵,我是刚来,可能主任是看看我的水平吧!
int startY = 20;
for(int i=0; i<30; i++){
graphics.drawString(paramVector.get(pageIndex), startX, startY);
startY += 20;
}
这个paramVector保存每页的数据
不过先在Panel中输出可以看到打印结果,调试程序很方便。
至于项目很多如有规律的话可以用循环语句.
页数是固定的还是随记录数不同变化。
CSDN刷新太慢,如有QQ可QQ聊。