Java的打印技术

 Java的打印功能
  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;
}
}
最新内容请见作者的GitHub页:http://qaseven.github.io/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值