Java的打印技术
http://www.zftb.cn  发布时间:2015-04-05 12:42 来源:一起学编程网 浏览:加载中

DeveloperWork上分享的一篇讲解Java打印技术的文章 和  Oracle上的关于Printing的Guide : 主要用到两个包 java.awt.print and javax.print

The basic printing operations are represented in the following sections:

  A Basic Printing Program – this section describes the Printable interface and presents a basic printing program.

  Using Print Setup Dialogs– this sections explains how to display the Print Setup Dialog.

  Printing a Multiple Page Document – this section explains how to use pagination for printing a multiple page document.

  Working with Print Services and Attributes ndash; this section teaches you about print services, how to specify the print data format, and how to create print job using the javax.print package.

  Printing the Contents of a User Interface – this section explains how to print the contents of a window or a frame.

  Printing Support in Swing Components - this section provides a brief description of the related printing functionality inSwing and refers to specific Swing classes and interfaces.

  Java打印技术的核心代码,可以参考下面的HelloWOrldPrinter,基本上来说就是建立PrinterJob与Printable接口的关系即可。

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.awt.print.*;

public class HelloWorldPrinter implements Printable, ActionListener {

public int print(Graphics g, PageFormat pf, int page) throws

PrinterException {

if (page > 0) { /* We have only one page, and 'page' is zero-based */

return NO_SUCH_PAGE;

}

/* User (0,0) is typically outside the imageable area, so we must

* translate by the X and Y values in the PageFormat to avoid clipping

*/

Graphics2D g2d = (Graphics2D)g;

g2d.translate(pf.getImageableX(), pf.getImageableY());

/* Now we perform our rendering */

g.drawString("Hello world!", 100, 100);

/* tell the caller that this page is part of the printed document */

return PAGE_EXISTS;

}

public void actionPerformed(ActionEvent e) {

PrinterJob job = PrinterJob.getPrinterJob();

job.setPrintable(this);

boolean ok = job.printDialog();

if (ok) {

try {

job.print();

} catch (PrinterException ex) {

/* The job did not successfully complete */

}

}

}

public static void main(String args[]) {

UIManager.put("swing.boldMetal", Boolean.FALSE);

JFrame f = new JFrame("Hello World Printer");

f.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {System.exit(0);}

});

JButton printButton = new JButton("Print Hello World");

printButton.addActionListener(new HelloWorldPrinter());

f.add("Center", printButton);

f.pack();

f.setVisible(true);

}

}

 本博在是将JPanel中的内容进行打印,直接将panel实现Printable接口即可,但是打印出来的页面上只有部分的Panel内容,特别是部分横向内容丢失,使用scale进行修正即可。

 

@Override

public int print(Graphics g, PageFormat pf, int page)

throws PrinterException {

if (page > 0) {

return NO_SUCH_PAGE;

}

Graphics2D g2d = (Graphics2D) g;

g2d.translate(pf.getImageableX(), pf.getImageableY());

g2d.scale(0.9, 0.9);

this.setSize(800, 900);

this.printAll(g2d);

return PAGE_EXISTS;

}

  另外,有一个关于equals方法的小疑问:

  出现编译错误:The method equals(VUserGroup) of type VUserGroup must override or implement a supertype method

 

@Override

public boolean equals(VUserGroup one) {

if (this.getUserId().equals(one.getUserId())) {

return true;

} else {

return false;

}

}

  正常的代码

 

public boolean equals(Object obj) {

VUserGroup one = (VUserGroup) obj;

if (this.getUserId().equals(one.getUserId())) {

return true;

} else {

return false;

}

}

如果你有好的win10资讯或者win10教程,以及win10相关的问题想要获得win10系统下载的关注与报道。
欢迎加入发送邮件到657025171#qq.com(#替换为@)。期待你的好消息!