开发者社区> 沉默术士> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java打印Excel
本文讲解如何用Java打印Excel。
102 0
用JAVA打印菱形(利用for循环)详细注释
用JAVA打印菱形(利用for循环)详细注释
4097 0
Java:封装
Java封装的介绍
55 0
JAVA继承范型
JAVA继承范型
30 0
拥有这些Java这些技术可以涨工资吗?
工作1-5年开发经验,当你们提出涨工资的时候,或者要offer的时候底气怎么样,是不是底气十足,不给涨工资就辞职,是不是有自信提出来主管、或者是项目经理都能同意,他们相当设法把你留住。
899 0
java后端技术栈
本文梳理了JAVAEE体系常用的技术点及工具
1977 0
Java7
java7相关的注意点
1232 0
+关注
5514
文章
253
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载