java打印计算机_Java打印程序设计全攻略

/*预览指定的页面*/

public void viewPage(int pos) {

int newPage = currentPage + pos; //指定页面在实际的范围内

if (0 <= newPage && newPage < preview.getPagesCount(printStr)) {

currentPage = newPage; //将指定页面赋值为当前页

repaint();

}

}

这样,在按下"Next"按钮时,只需要调用canvas.viewPage(1);而在按下"Preview"按钮时,只需要调用canvas.viewPage(-1)即可实现预览的前后翻页。

打印图形

1、应用场景

在实际应用中,我们还需要打印图形。譬如,我们有时需要将一个Java Applet的完整界面或一个应用程序窗体及其所包含的全部组件都打印出来,又应该如何实现呢?

2、解决方法

基本思路如下:在Java的Component类及其派生类中都提供了print和printAll方法,只要设置好属性就可以直接调用这两个方法,从而实现对组件及图形的打印。

/*打印指定的窗体及其包含的组件*/

private void printFrameAction() {

Toolkit kit = Toolkit.getDefaultToolkit(); //获取工具箱

Properties props = new Properties();

props.put("awt.print.printer", "durango"); //设置打印属性

props.put("awt.print.numCopies", "2");

if (kit != null) {

//获取工具箱自带的打印对象

PrintJob printJob = kit.getPrintJob(this, "Print Frame", props);

if (printJob != null) {

Graphics pg = printJob.getGraphics(); //获取打印对象的图形环境

if (pg != null) {

try {

this.printAll(pg); //打印该窗体及其所有的组件

}

finally {

pg.dispose(); //注销图形环境

}

}

printJob.end(); //结束打印作业

}

}

}

打印文件

1、应用场景

在很多实际应用情况下,我们可能都需要打印用户指定的某一个文件。该文件可能是图形文件,如GIF、JPEG等等;也可能是文本文件,如TXT、Java文件等等;还可能是复杂的PDF、DOC文件等等。那么对于这样的打印需求,我们又应该如何实现呢?

2、解决方法

基本思路:在jdk1.4以前的版本,要实现这样的打印功能将非常麻烦和复杂,甚至是难以想象的。但幸运的是,jdk1.4的打印服务API提供了一整套的打印文件流的类和方法。利用它们,我们可以非常方便快捷地实现各式各样不同类型文件的打印功能。下面给出一个通用的处理方法。

/*打印指定的文件*/

private void printFileAction() {

//构造一个文件选择器,默认为当前目录

JFileChooser fileChooser = new JFileChooser(SystemProperties.USER_DIR);

int state = fileChooser.showOpenDialog(this); //弹出文件选择对话框

if (state == fileChooser.APPROVE_OPTION) //如果用户选定了文件

{

File file = fileChooser.getSelectedFile(); //获取选择的文件

//构建打印请求属性集

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

//设置打印格式,因为未确定文件类型,这里选择AUTOSENSE

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

//查找所有的可用打印服务

PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);

//定位默认的打印服务

PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();

//显示打印对话框

PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras);

if (service != null) {

try {

DocPrintJob job = service.createPrintJob(); //创建打印作业

FileInputStream fis = new FileInputStream(file); //构造待打印的文件流

DocAttributeSet das = new HashDocAttributeSet();

Doc doc = new SimpleDoc(fis, flavor, das); //建立打印文件格式

job.print(doc, pras); //进行文件的打印

}

catch(Exception e) {

e.printStackTrace();

}

}

}

}

在上面的示例中,因尚未确定文件的类型,所以将指定文件的打印格式定义为DocFlavor.INPUT_STREAM.AUTOSENSE。事实上,如果在进行打印之前,就已确定地知道文件的格式,如为GIF,就应定义为DocFlavor.INPUT_STREAM.GIF ;如为PDF,就应该定义为DocFlavor.INPUT_STREAM.PDF;如为纯ASCII文件,就可以定义为 DocFlavor.INPUT_STREAM.TEXT_HTML_US_ASCII。等等。

jdk1.4的javax.print.DocFlavor提供了极为丰富的文件流类型,你可以根据具体的应用需求进行合适的选择。具体的API参考文档可见本文的参考资料3。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值