Java打印最
java实现打印机功能,过长处理方式
java实现打印机功能,过长处理方式在Java中实现打印机功能时,可以使用字符串的截取方法来处理过长的文本。
以下是一个示例:```javapublic class Printer {private static final int MAX_LINE_LENGTH = 50; // 打印机每行的最大长度public static void main(String[] args) {String text = "这是一段过长的文本,需要进行处理以适应打印机的行宽。
";printText(text);}public static void printText(String text) {int textLength = text.length();if (textLength <= MAX_LINE_LENGTH) {System.out.println(text); // 文本长度小于等于行宽,直接打印} else {int startIndex = 0;while (startIndex < textLength) {int endIndex = Math.min(startIndex +MAX_LINE_LENGTH, textLength); // 取该行的结束索引String line = text.substring(startIndex, endIndex); // 截取该行的文本System.out.println(line);startIndex = endIndex; // 更新起始索引}}}}```在上述示例中,`printText()`方法用于打印文本。
当文本长度小于等于行宽时,直接将文本打印出来。
当文本长度超过行宽时,通过循环逐行截取文本,并打印出截取的每一行。
每次截取的截止索引都是起始索引加上行宽和剩余文本长度的较小值,以保证不会超出文本的长度。
JAVA中的打印
java定位打印(如:超市,票据打印)Java自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。
事实上,java1.0不支持任何打印功能。
Java1.1在java.awt包里包含了一个叫做PrintJob的类,但是这个类提供的打印功能十分粗糙和不可靠。
当java1.2问世,它围绕PrinterJob设计了一个完整独立的打印机制(叫做java2D printing API),并且在java.awt.print包里定义了一些新的类和接口。
这些使得基于PrintJob打印机制(就是AWT printing)基本荒废,虽然PrintJob从未被抨击而且至少在这篇文章里仍然是一个提供技术的类。
在J2SE1.3里当PrintJob的功能扩展到可以通过在java.awt包里的JobAttributes 和PageAttributes两个类设定工程和页面的属性时发生了一些额外的改变。
随着J2SE1.3的发布,打印功能相应的得到了完善;但是在混合使用这两种完全不同的打印机制的时候仍然存在一些问题。
比如,这两种机制使用java.awt.Graphics这个类的一个接口来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。
另外,完善的PrintJob提供了很有限的工程相关属性的设置;这两种机制都没有办法通过程序来选择目标打印机。
Java打印最大的改变来自于J2SE1.4的发布带来的Java打印服务API。
这个第三代Java 打印支持接口突破了先前提到的局限性。
因为新的API就是以前两种旧的打印机制定义的功能函数的一个父集。
下面是我通过这些API写的定位打印示例代码,希望对用java实现打印的朋友有一定的帮助!在CentOS4.4,jdk1.6下测试通过。
package com.eadd.test.print;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.print.PageFormat;import java.awt.print.Printable;import java.awt.print.PrinterException;import javax.print.Doc;import javax.print.DocFlavor;import javax.print.DocPrintJob;import javax.print.PrintException;import javax.print.PrintService;import javax.print.PrintServiceLookup;import javax.print.SimpleDoc;import javax.print.attribute.DocAttributeSet;import javax.print.attribute.HashDocAttributeSet;import javax.print.attribute.HashPrintRequestAttributeSet;import javax.print.attribute.PrintRequestAttributeSet;import javax.print.attribute.standard.MediaSizeName;import javax.swing.JOptionPane;/*** java定位打印,把打印内容打到指定的地方。
Java高级编程:打印--学习如何使用打印服务API
Java高级编程:打印--学习如何使用打印服务API摘要在这篇文章里,来自Pro Java Programming(Apress,June2005)专家Brett Spell解释了如何一步一步的定位打印设备,创建打印工程,创建一个Doc文档接口的实例来描述你想要打印的数据并且初始化打印。
(4500字,2005年7月25日)Java自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。
事实上,java1.0不支持任何打印功能。
Java1.1在java.awt包里包含了一个叫做PrintJob的类,但是这个类提供的打印功能十分粗糙和不可靠。
当java1.2问世,它围绕PrinterJob设计了一个完整独立的打印机制(叫做java2D printing API),并且在java.awt.print包里定义了一些新的类和接口。
这些使得基于PrintJob打印机制(就是AWT printing)基本荒废,虽然PrintJob 从未被抨击而且至少在这篇文章里仍然是一个提供技术的类。
在J2SE1.3里当PrintJob的功能扩展到可以通过在java.awt包里的JobAttributes和PageAttributes两个类设定工程和页面的属性时发生了一些额外的改变。
随着J2SE1.3的发布,打印功能相应的得到了完善;但是在混合使用这两种完全不同的打印机制的时候仍然存在一些问题。
比如,这两种机制使用java.awt.Graphics这个类的一个接口来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。
另外,完善的PrintJob提供了很有限的工程相关属性的设置;这两种机制都没有办法通过程序来选择目标打印机。
Java打印最大的改变来自于J2SE的发布带来的Java打印服务API。
这个第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintService和DocPrintJob接口的局限性。
java 打印日志的内容
java 打印日志的内容Java是一种广泛使用的编程语言,开发人员可以使用它来创建各种类型的应用程序。
在Java应用程序开发的过程中,打印日志是一种常见的调试和日志记录方法。
通过打印日志,开发人员可以追踪应用程序在执行过程中的各种信息,如变量的值、方法的调用顺序以及潜在的错误等。
本文将介绍如何在Java应用程序中打印日志的内容,并逐步回答关于日志打印的主题。
第一步:导入日志库在Java中,有多种日志库可供选择,如java.util.logging、Log4j和Logback等。
这些日志库提供了一组API和功能,用于实现日志打印和记录。
在开始打印日志之前,我们需要将所选的日志库导入到Java项目中。
可以通过Maven或手动下载日志库的JAR文件并将其添加到项目依赖中。
导入日志库后,我们可以使用库中提供的类和方法来实现日志打印。
第二步:选择日志级别Java的日志库通常提供多种日志级别,如TRACE、DEBUG、INFO、WARN、ERROR等。
不同的日志级别对应不同的日志信息,可以根据需求选择合适的日志级别。
一般来说,开发人员可以使用DEBUG级别来打印详细的调试信息,使用INFO级别来打印一般的应用程序状态信息,使用WARN 级别来打印潜在的问题和警告,使用ERROR级别来打印错误和异常信息。
在选择日志级别时,需要根据应用程序的特点和需求来决定。
第三步:获取日志实例在Java的日志库中,通常有一个类似于Logger的日志实例。
我们需要获取到这个日志实例,然后使用它来打印日志。
获取日志实例通常需要使用一个静态方法,可以通过类名.方法名的方式获取。
例如,在Log4j中,可以使用Logger.getLogger方法来获取日志实例。
在获取日志实例之前,通常需要提供一个唯一的字符串作为日志的命名空间,以便区分不同类的日志。
第四步:打印日志消息获取到日志实例后,我们可以使用它的方法来打印日志消息。
不同的日志库可能有不同的方法名和参数,但基本的原理是相似的。
java批量打印图片
J ava批量打印图片解决方案有两个解决方法:直接打印一个图片集合;将多个图片放到一个文件里,再打印这个文件。
一、直接打印图片集合首先实现单个图片的打印(用到javax下的print包)。
根据图片格式选择不同的打印方式(支持gif、jpg、png格式的图片)。
其次实现多个图片的打印。
用多次调用打印程序的方式实现图片的打印,但是会出现问题:每次打印都是重复调用打印机,不能实现调用一次打印机就批量完成打印,最多实现:一次批量打印,只取一次打印机,然后多次调用这个打印机打印单张图片。
考虑将几个图片在打印前合并成一个,然后打印出来。
这种方式打印图片是将图片转化成流的形式打印,有方法实现将几个图片流数据合并成一个流,然后将流数据打印出来。
问题又出现了:这种合并流的方式是将几个不同的图片合并到一个图片里,没有分页;同时没有考虑这种流的合成方式对图片本身内容的影像(未验证)。
二、将多个图片合一,然后打印从目标达成方面考虑,将图片合一有两种格式:word和pdf。
但是考虑到是图片信息在word中显的问题,特别是技术实现和效果方面考虑,最后选择将批量图片制作成pdf格式的文件,交付打印。
目前关于将图片转换成pdf文件应用最广泛的是itext,iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。
通过iText不仅可以生成PDF 或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
这里也可以用纯加java的方式将图片呢合并成pdf文件。
在长春人事档案目录里面,有实现图片转换为pdf的源代码,大家有用到的可以去这个目录(com.yinhai.file.ImageUtils.java)里面找,里面实现了两个静态方法:1)imageToPdf(String 需要转化为pdf的图片所在文件夹,String 新生成pdf文件的路径)要将图片文件转换为pdf文件要分三步走:首先,得到需要转化的图片。
用JAVA实现打印功能
⽤JAVA实现打印功能⽤java实现打印,java.awt中提供了⼀些打印的API,要实现打印,⾸先要获得打印对象,然后继承Printable实现接⼝⽅法print,以便打印机进⾏打印,最后⽤Graphics2D直接输出直接输出。
下⾯的例⼦实现了打印字符串,线(包括虚线)和打印图⽚。
⽽且通过Paper的setImageableArea可以设置打印的区域和边距,让开发者随意的设置打印的位置。
package .gao;import java.awt.Graphics;import java.awt.print.Book;import java.awt.print.PageFormat;import java.awt.print.Paper;import java.awt.print.Printable;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;import java.awt.*;public class PrintTest implements Printable{/*** @param Graphic指明打印的图形环境* @param PageFormat指明打印页格式(页⾯⼤⼩以点为计量单位,1点为1英才的1/72,1英⼨为25.4毫⽶。
A4纸⼤致为595×842点)* @param pageIndex指明页号**/public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {System.out.println("pageIndex="+pageIndex);Component c = null;//print stringString str = "中华民族是勤劳、勇敢和富有智慧的伟⼤民族。
java实现打印套打功能
String str = value[i];
int[ temp = position[i];
int x = temp[0];
int y = temp[1];
//设置打印字体(字体名称、样式和点大小)
Font font = new Font("新宋体", Font.PLAIN, 9);
pj.setPrintable(printTest, pf);
if (pj.printDialog()) { //弹出打印对话框,打印对话框,用户可以通过它改变各种选项,例如:设置打印副本数目,页面方向,或者目标打印机。
try {
pj.print();
} catch (PrinterException e) {
PrinterJob pj = PrinterJob.getPrinterJob();//创建一个打印任务
PageFormat pf = PrinterJob.getPrinterJob().defaultPage();
Paper paper = pf.getPaper();
//设置页面高和宽,A4纸为595,842
double pageWidth = 595;
double pageHeight = 810;
paper.setSize(pageWidth, pageHeight);
paper.setImageableArea(0, 0, pageWidth, pageHeight);
pf.setOrientation(NDSCAPE); //设置打印方向,LANDSCAPE为横向,打印方向默认为纵向
java实现打印功能的一些API
java实现打印功能的⼀些APIjava实现打印功能的⼀些类主要类与接⼝位置(包): (1)java.awt.print (2)(JDK1.4新增)。
其中 a). java.print包中主要包含打印服务的相关类; b). 其⼦包javax.print.event则包含打印事件的相关定义; c). 其⼦包javax.print.attribute则包括打印服务的可⽤属性列表等;主要类与接⼝: 1.PrintJob 2.PageFormat 3.Page1.java.awt.print1.1 PrintJob实现打印功能的核⼼类1.1.1 getPrintJob()作⽤:返回默认打印机。
如果没有打印机,则仍返回⼀个PrintJob对象,但是getPrintService()返回null。
throws:SecurityException1.2 PageFormat设置打印的纸的⼤⼩与⽅向2.javax.print2.1 PrintService 接⼝ PrintService 是 DocPrintJob 的⼯⼚。
PrintService 描述了打印机的功能,并可查询它来了解打印机⽀持的属性2.2 DocFlavor 类 DocFlavor 封装了⼀个提供给 DocPrintJob 打印数据的格式的对象。
2.3 PrintServiceLookup 此类为特定类型的 PrintService提供查找服务3.javax.print.attribute4.javax.print.attribute.standard4.1 Copies打印副本的数量5.javax.print.event6.涉及到的属性(Attribute)实现类 每⼀个AttributeSet⼦接⼝都有⼀个相应Attribute⼦接⼝和继承⼦类。
当添加⼀个属性时,继承的⼦类试图把Attribute作为参数给相应的⼦接⼝,这样来确保只有当前适当的属性会成功添加 注:打印属性较多,查找时可以从DocAttribute, PrintRequestAttribute, PrintJobAttribute这三个接⼝的实现类⼊⼿。
java打印和打印预览机制实例代码_
java打印和打印预览机制实例代码_ 代码如下:import java.awt.basicstroke;import java.awt.borderlayout;import java.awt.color;import ponent;import java.awt.dimension;import java.awt.font;import java.awt.fontmetrics;import java.awt.graphics;import java.awt.graphics2d;import java.awt.gridlayout;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.awt.event.mouseadapter;import java.awt.event.mouseevent;import java.awt.print.pageformat;import java.awt.print.printable;import java.awt.print.printerexception;import java.awt.print.printerjob;import javax.swing.jbutton;import javax.swing.jdialog;import javax.swing.jframe;import javax.swing.jpanel;import javax.swing.jscrollpane;import javax.swing.jtextarea;import javax.swing.swingutilities;import javax.swing.windowconstants;import javax.swing.text.badlocationexception;import javax.swing.text.document;/*** 用法了原始的分页方式去渲染jtextarea,供应了打印预览机制。
Java日志打印的15个好建议
Java⽇志打印的15个好建议⽬录1. 选择恰当的⽇志级别2. ⽇志要打印出⽅法的⼊参、出参3. 选择合适的⽇志格式4. 遇到if...else...等条件时,每个分⽀⾸⾏都尽量打印⽇志5.⽇志级别⽐较低时,进⾏⽇志开关判断6. 不能直接使⽤⽇志系统(Log4j、Logback)中的 API,⽽是使⽤⽇志框架SLF4J中的API。
7. 建议使⽤参数占位{},⽽不是⽤+拼接。
8. 建议使⽤异步的⽅式来输出⽇志。
9. 不要使⽤e.printStackTrace()10. 异常⽇志不要只打⼀半,要输出全部错误信息11. 禁⽌在线上环境开启 debug12.不要记录了异常,⼜抛出异常13.避免重复打印⽇志14.⽇志⽂件分离15. 核⼼功能模块,建议打印较完整的⽇志总结1. 选择恰当的⽇志级别常见的⽇志级别有5种,分别是error、warn、info、debug、trace。
⽇常开发中,我们需要选择恰当的⽇志级别,不要反⼿就是打印info哈~error:错误⽇志,指⽐较严重的错误,对正常业务有影响,需要运维配置监控的;warn:警告⽇志,⼀般的错误,对业务影响不⼤,但是需要开发关注;info:信息⽇志,记录排查问题的关键信息,如调⽤时间、出参⼊参等等;debug:⽤于开发DEBUG的,关键逻辑⾥⾯的运⾏时数据;trace:最详细的信息,⼀般这些信息只记录到⽇志⽂件中。
2. ⽇志要打印出⽅法的⼊参、出参我们并不需要打印很多很多⽇志,只需要打印可以快速定位问题的有效⽇志。
有效的⽇志,是甩锅的利器!哪些算得的上有效关键的⽇志呢?⽐如说,⽅法进来的时候,打印⼊参。
再然后呢,在⽅法返回的时候,就是打印出参,返回值。
⼊参的话,⼀般就是userId或者bizSeq这些关键信息。
正例如下:public String testLogMethod(Document doc, Mode mode){log.debug(“method enter param:{}”,userId);String id = "666";log.debug(“method exit param:{}”,id);return id;}3. 选择合适的⽇志格式理想的⽇志格式,应当包括这些最基本的信息:如当前时间戳(⼀般毫秒精确度)、⽇志级别,线程名字等等。
JavaPrintService_Java打印API用户手册
目录第一章介绍Java平台打印的历史JDK 1.3JDK 1.2JDK 1.1Java Print Service API能做什么Java Print Service 构架javax.print包发现打印服务指定打印数据格式创建打印工作javax.print.event包应用程序如何使用JPS一个基本的例子第二章属性属性的类别和值属性角色属性集如何指定属性标准属性OrientationRequestedCopiesMediaMediaSizeMediaPrintableAreaDestinationSheetCollateSidesFidelity使用JPS属性第三章指定文档类型用户格式打印数据预定义数据格式的MIME类型文本数据页面描述语言文档图像数据自适应打印数据表示类字符编码的重要性服务格式打印数据怎样使用DocFlavor第四章打印及流化文档比较StreamPrintService与PrintService定位服务发现打印服务发现流打印服务获得一个打印工作创建DOC注册事件打印服务事件打印工作事件PrintJobAttributeListenerPrintJobListener提交打印工作向打印机提交打印工作向流提交打印工作打印服务提供商第五章打印及流化2D图像使用打印工作打印或流化图像打印2D图像流化2D图像使用服务格式数据打印服务格式数据流化服务格式打印数据示例:PrintPS.java示例:PrintGIFtoStream.java示例:Print2DPrinterJob.java示例:Print2DGraphics.java示例:Print2DtoStream.java示例:PrintGIF.javaJava Print Service 词汇表第一章介绍Java Print Service (JPS)是一个Java打印API,设计此API是为了支持在所有Java 平台上的打印工作——包括微空间平台,并且支持现有的API。
JAVA的打印机制
JAVA的打印机制Java 自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。
事实上,java1.0不支持任何打印功能。
Java1.1在java.awt包里包含了一个叫做PrintJob的类,但是这个类提供的打印功能十分粗糙和不可靠。
当java1.2问世,它围绕PrinterJob设计了一个完整独立的打印机制(叫做java2D printing API),并且在java.awt.print包里定义了一些新的类和接口。
这些使得基于PrintJob打印机制(就是AWT printing)基本荒废,虽然PrintJob从未被抨击而且至少在这篇文章里仍然是一个提供技术的类。
在我们的实际工作中,经常需要实现打印功能。
但由于历史原因,Java提供的打印功能一直都比较弱。
实际上最初的jdk根本不支持打印,直到jdk1.1 才引入了很轻量的打印支持。
所以,在以前用Java/Applet/JSP/Servlet设计的程序中,较复杂的打印都是通过调用ActiveX/OCX控件或者VB/VC程序来实现的,非常麻烦。
实际上,SUN公司也一直致力于Java打印功能的完善,而Java2平台则终于有了一个健壮的打印模式的开端,该打印模式与Java2D图形包充分结合成一体。
更令人鼓舞的是,新发布的jdk1.4则提供了一套完整的"Java 打印服务 API" (Java Print Service API),它对已有的打印功能是积极的补充。
利用它,我们可以实现大部分实际应用需求,包括打印文字、图形、文件及打印预览等等。
本文将通过一个具体的程序实例来说明如何设计Java打印程序以实现这些功能,并对不同版本的实现方法进行分析比较,希望大家能从中获取一些有益的提示。
9.1 Java的打印APIJava的打印API主要存在于java.awt.print包中。
而jdk1.4新增的类则主要存在于javax.print 包及其相应的子包javax.print.event和javax.print.attribute中。
Java的打印输出和注释
System.out.println("姓名\t性别\t年龄\t成绩\n刘备\t男\t35\t98\n关羽\t男\t33\t89\n张飞 \t男\t31\t78"); 执行后效果如下:
(3)Java中的注释即写给程序猿自己的提示,执行代码的时候不会被执行,Java中的常见注释分为单 行注释和多行注释。 单行注释语法如下:
//我是单行注释 多行注释的语法如下:
/* * 时间:2019-11-25 * 作者:屌丝 * 程序功能:实现数组元素的排序 * */
版权所有:屌丝学编程。
Java的打印输出和注释
(1)Java中的打印输出,语法如"); System.out.print("Hello World!");
其中println打印后自动换行,print打印后不换行。 (2)在打印中使用转义字符。 常用转义字符:
java 打印inputstream的方法
java 打印inputstream的方法在Java中,我们可以使用多种方法来打印InputStream的内容。
下面我将介绍两种常用的方法:方法一:使用BufferedReader逐行读取并打印```javapublic static void printInputStream(InputStream inputStream) {BufferedReader reader = new BufferedReader(newInputStreamReader(inputStream));String line;try {while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();} finally {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}```这个方法首先将InputStream转换为BufferedReader来逐行读取内容,并使用循环打印每一行的内容。
最后,关闭BufferedReader以释放资源。
方法二:使用ByteArrayOutputStream转换为字符串打印```javapublic static void printInputStream(InputStream inputStream) {ByteArrayOutputStream result = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int length;try {while((length = inputStream.read(buffer)) != -1) {result.write(buffer, 0, length);}System.out.println(result.toString("UTF-8"));} catch (IOException e) {e.printStackTrace();} finally {try {result.close();} catch (IOException e) {e.printStackTrace();}}}```这个方法使用ByteArrayOutputStream来将InputStream的内容读取到内存中,并转换为字符串打印。
java 打印方法
java 打印方法一、System.out.println()方法System.out.println()是Java中最常用的打印方法之一,用于将指定的数据打印到控制台。
该方法可以打印各种类型的数据,如字符串、数字、布尔值等。
下面是一些例子:1. 打印字符串:System.out.println("Hello, World!");2. 打印整数:System.out.println(123);3. 打印浮点数:System.out.println(3.14);4. 打印布尔值:System.out.println(true);二、System.out.print()方法System.out.print()是与System.out.println()类似的打印方法,但是不会自动换行。
该方法会将指定的数据打印到控制台,然后继续在同一行打印后续的内容。
下面是一些例子:1. 打印字符串:System.out.print("Hello, ");System.out.println("World!");打印结果为:Hello, World!2. 打印数字:System.out.print(123);System.out.println(456);打印结果为:123456三、格式化输出除了直接打印数据,Java还提供了格式化输出的方法,可以按照指定的格式打印数据。
这样可以使输出结果更加清晰和美观。
下面是一些例子:1. 打印带有占位符的字符串:String name = "Tom";int age = 20;System.out.printf("My name is %s, I am %d years old.", name, age);打印结果为:My name is Tom, I am 20 years old.2. 打印指定宽度的数字:int num = 123;System.out.printf("%5d", num);打印结果为: 123 (总宽度为5)四、打印数组在Java中,我们可以使用Arrays类的toString()方法将数组转换为字符串,然后使用打印方法打印出来。
java print方法
Java Print 方法Java 中的 Print 方法是 Java 编程语言中打印输出的基本方法,可用于将文本或图形输出到控制台或打印机中。
本文介绍了 Java 中 Print 方法的基本概念和使用方法。
下面是本店铺为大家精心编写的5篇《Java Print 方法》,供大家借鉴与参考,希望对大家有所帮助。
《Java Print 方法》篇1Java 是一种广泛使用的编程语言,其标准库中提供了许多用于输入和输出的基本方法。
其中,Print 方法是 Java 中用于打印输出的基本方法之一。
Java 中的 Print 方法可用于将文本或图形输出到控制台或打印机中。
该方法有多个重载版本,可以接受不同类型的参数。
其中,最常用的重载版本是 Print 方法 (String),它接受一个字符串参数并打印该字符串。
下面是一个简单的示例代码,演示如何使用 Print 方法在控制台上打印输出一条消息:```public class Example {public static void main(String[] args) {System.out.println("Hello, World!");}```在上面的代码中,我们使用 System.out.println() 方法打印了一条消息 "Hello, World!"。
println() 方法是 Print 方法的一种常用形式,它将在控制台上打印一行文本。
除了使用 println() 方法外,还可以使用其他形式的 Print 方法来打印不同的内容。
例如,使用 printf() 方法可以格式化输出文本,如下所示:```public class Example {public static void main(String[] args) {System.out.printf("The answer is %d%n", 42);}}```在上面的代码中,我们使用 printf() 方法打印了一个格式化的字符串 "The answer is 42",其中 %d 表示一个整数,并被替换为参数 42。
JAVA 打印指定的文件
//设置打印格式,因为未确定文件类型,这里选择AUTOSENSE
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
//查找所有的可用打印服务
if (service != null)
{
try
{
DocPrintJob job = service.createPrintJob();//创建打印作业
int state = fileChooser.showOpenDialog(this);//弹出文件选择对话框
if (state == fileChooser.APPROVE_OPION)//如果用户选定了文件
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
//定位默认的打印服务
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
catch(Exception e)
{
e.printStackTrace();
}
}
以上程序测试没出现问题,但是换PDF输出 DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF; 出现以下问题,尚未解决
Exception:ng.Exception: ng.IllegalArgumentException: services must be non-null and non-empty
{
File file = fileChooser.getSelectedFile();//获取选择的文件
java重写打印方法
java重写打印方法标题:Java重写打印方法的实践一、引言在Java编程中,我们经常需要使用到打印功能。
Java中的System.out.println()是默认的打印语句,它可以在控制台输出指定的内容。
然而,在一些特定的场景下,我们可能需要对这个打印方法进行重写以满足我们的需求。
二、为什么要重写打印方法?1. 提高代码可读性:通过自定义打印方法,我们可以为打印的内容添加注释或标签,使得代码更易理解。
2. 扩展打印功能:系统提供的打印方法功能有限,如果我们需要更复杂的功能(如颜色输出、格式化输出等),就需要重写打印方法。
三、如何重写打印方法?以下是一个简单的例子,我们将创建一个名为print的类,并在这个类中定义一个名为println的方法,该方法将接受一个字符串作为参数并将其打印出来。
```javapublic class Print {public void println(String str) {System.out.println(str);}}```然后,我们可以在主函数中使用这个新的打印方法:```javapublic class Main {public static void main(String[] args) {Print p = new Print();p.println("Hello, World!");}}```四、进阶技巧以上只是最基本的重写打印方法的方式,实际上,我们可以根据需要进一步扩展这个方法。
例如,我们可以添加更多的参数来改变打印的颜色或者样式,或者添加逻辑来处理不同的输入类型。
五、总结通过重写打印方法,我们可以根据自己的需求定制打印功能,从而提高代码的可读性和灵活性。
这不仅是一种实用的技术,也是一种提升编程能力的好方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java打印最大的改变来自于J2SE的发布带来的Java打印服务API。
这个第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintService和DocPrintJob接口的局限性。
因为新的API就是以前两种旧的打印机制定义的功能函数的一个父集,它是目前我们常用的方法并且是这篇文章的焦点。
更深入来说,以下的步骤包含了怎么使用这个新的Java打印服务API:1.定义打印机,限制那些返回到提供你要实现功能的函数的列表。
打印服务实现了PrintService接口.2.通过调用接口中定义的createPrintJob()方法创建一个打印事件,作为DocPrintJob的一个实例。
3.创建一个实现Doc接口的类来描述你想要打印的数据, 你也可以创建一个PrintRequestAttributeSet的实例来定义你想要的打印选项。
4.通过DocPrintJob接口定义的printv()方法来初始化打印,指定你先前创建的Doc,指定PrintRequestAttributeSet或者设为空值。
现在你可以检查每一步并且试着完成它们。
注意在这篇文章里,我将交替使用打印机和打印服务,因为在大部分情况下,打印服务不亚于一台真实的打印机。
一般的打印服务反映了理论上可以发送到不仅仅是打印机的的输出。
举例来说,打印服务也许根本不能打印东西但是可以往磁盘上的文件写数据。
换句话说,所有的打印机可以看成是特殊的打印服务,但是并不是所有打印服务和打印机有联系。
就像你一般把你的文本送到打印机那里一样,我有时候使用更为简便的打印机这个名词来代替技术上更精确的打印服务。
定义打印服务你可以使用在PrintServiceLookup类中定义的三种静态方法中的一种来定义。
最简单的一种就是lookupDefaultPrintService(),正如它的名字一样,它返回一个你默认的打印机:PrintService service = PrintServiceLookup.lookupDefaultPrintService();虽然用这个办法很简单也很方便,用它来选择你的打印机意味着用户的打印机一直都支持你的程序所要精确传输的数据输出。
实际上,你真正想要的是那种可以处理你想要的数据的类型并且可以支持你要的特征例如颜色或者两边打印。
为了从列表中中返回你所要求的特殊功能支持的打印机,你可以使用剩下两个方法中的lookupPrintServices() 或者lookupMultiDocPrintServices()。
lookupPrintServices()方法有两个参数:一个DocFlavor的实例和实现AttributeSet接口的实例。
你马上将看到,你可以使用两者中任意一个来限制返回的打印机,但是lookupPrintServices()允许你指定这两个参数为空值。
如果把两者都设为空,那么你得到的返回值将是任意一个可用的打印机。
在这种情况下,你并不需要查看PrintService中定义的方法,其中一个getName()方法返回了一个字符串,代表打印机的名字。
你可以编译下面的代码来列出你的系统现有的打印机:PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);for (int i = 0; i < services.length; i++){System.out.println(services[i].getName());}例如你的系统名为PrintServer,下面有Alpha, Beta, 和Gamma 打印机,用以上代码可以得到以下输出:\\PrintServer\Alpha\\PrintServer\Beta\\PrintServer\Gamma现在查看那些你可以传给lookupPrintServices()方法的参数来看看如何返回拥有特殊功能的打印机。
DocFlavor第一个你可以指定的参数是一个DocFlavor类的实例,它描述了将要打印的数据的类型和数据如何存储。
在大部分情况下,并不需要去创建一个新的实例因为Java包含了很多预先定义的实例,使得你可以用它们来传给lookupPrintServices()。
然而,我们还是来看一下DocFlavor的结构和方法来探讨打印服务如何使用这个实例。
创建DocFlavor实例需要的两个参数都是字符串,一个是MIME (Multipurpose Internet Mail Extensions)类型另一个是类的名字。
MIME类型被用于描述数据类型。
例如,你要打印一个gif文件,你需要使用MIME类型是image/gif的DocFlavor。
相类似,如果你要打印HTML文件里的文本信息要使用MIME类型似text/plain或者text/html。
表现类MIME类型描述将要打印的数据的类型,表现的类则表示如何让打印服务得到这些数据。
DocFlavor包含了几个静态的内部类,每一个相对应一个表现类和如何装载要打印得数据。
表1中列出了上面提到的内部类和表现类。
注意在SERVICE_FORMATTED(一会我会更详细地解释)旁边,每一个和"binary"或者"character"相对应。
事实上,这些差别是人为的,因为"character"数据类型本身就是一种特殊的binary类型。
这种情况下,我们说的二进制(binary)数据包括人们可以看懂的字符和一些格式化的字符比如tabs,换行回车等。
当然,这些差别很重要,反映出面向字符的表现类并不适合存储二进制数据。
例如,你不会用字符队列或者字符串来保存一个gif文件,你也不能通过Reader接口来访问它。
另一方面,因为字符也是一种特殊的二进制数据,它完全适合储存文本信息到字节数组里或者通过InputStream或者一个URL来访问它。
Table 1. DocFlavor的表现类上面定义的任何一个静态内部类相对应一个表现类,但是请记住我说过每一个DocFlavor的实例通过一个表现类和一个MIME来确认要打印的数据的类型。
要访问这样一个实例,你要通过表1总列出的内部类。
例如,我们假设你要打印一个在网上通过URL访问的gif文件,这样的话,就选择表现类是.url,对应的在DocFlavor中的静态类就是URL类。
如果你打开那个内部类的文档,你会发现其实它定义了一系列静态的内部类,每一个对应一种打印机支持的MIME类型。
表2描述了在DocFlavor.URL里的内部类和MIMETable 2. The DocFlavor.URL inner classes因为要通过URL打印gif图片,你可以用一下代码来获得实例DocFlavor flavor = DocFlavor.URL.GIF;这个代码创建了一个DocFlavor实例,代表类是.URL,MIME是image/gif。
表2列出的了DocFlavor.URL的类,那么其他六个内部类呢?我们等下来讨论一下SERVICE_FORMATTED,这之前,看看与二进制数据联系的所有三种类型(BYTE_ARRAY,INPUT_STREAM, and URL)相关的内部类。
例如,如果你把gif储存到了一个字节数组里,那么你可以用以下代码:DocFlavor flavor = DocFlavor.BYTE_ARRAY.GIF;正如有三个与二进制类型关联的内部类一样,与字符类型相关的另外三个类列在表3里Table 3. CHAR_ARRAY, READER, and STRING所以,如果你想打印储存在字符串中的文本数据,用以下代码:DocFlavor flavor = DocFlavor.STRING.TEXT_PLAIN;类似的,如果文本来自于网页上的HTML文档,用以下代码:DocFlavor flavor = DocFlavor.STRING.TEXT_HTML;选择正确的打印机还记得我们在开始关于讨论DocFlavor之前关于打印机的那个精确支持你想要打印的数据类型的假设吗?这似乎看起来没有必要。
实际上,你会对给你的打印机所支持的文档类型感到吃惊。
例如,刚提到文本类型看起来似乎是最容易支持的,所以,如果你的程序要打印一个普通文本或者HTML文本,你可以随便选择一个打印服务并把它送到打印机那去。
然而大部分打印机不支持基于文本的表现类,如果你试图向打印机发送它不支持的DocFlavor,会产生下面的异常:Exception in thread "main"sun.print.PrintJobFlavorException: invalid flavor atsun.print.Win32PrintJob.print(Win32PrintJob.java:290) atPrintTest.main(PrintTest.java:11)现在你已经知道了如何得到一个DocFlavor的引用而且我们也讨论了选择支持这个flavor的打印机重要性,接下来我来告诉你如何确定你使用的打印机支持它。
我先前说过lookupPrintServices()允许你指定一个DocFlavor作为第一个参数,如果你指定的参数非空,那么方法会返回相应支持这个的打印机的实例。
例如以下代码将返回可以通过URL来打印gif文件的打印机的列表:DocFlavor flavor = DocFlavor.URL.GIF;PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);另外,如果你的程序已经获得了打印服务的实例,而你想知道它是否支持另一种特定的flavor,你可以调用isDocFlavorSupported()方法。
在下面的代码里,将得到一个默认打印机的引用,如果不能打印gif就会出现错误信息:PrintService service = PrintServiceLookup.lookupDefaultPrintService();DocFlavor flavor = DocFlavor.URL.GIF;if (!service.isDocFlavorSupported(flavor)){System.err.println("The printer does not support the appropriate DocFlavor");}AttributeSet正如你看到的,DocFlavor描述打印数据而且可以用来确定打印服务是否支持这种数据。