java中打印问题(在线等)(100分)

  • 主题发起人 主题发起人 yuqinghe
  • 开始时间 开始时间
Y

yuqinghe

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想将一段字符串打印到打印机上,怎么办呢?在线等待......
 
你看看这个,到里面去找吧:
java.io
Class PrintWriter
java.lang.Object
|
+-java.io.Writer
|
+-java.io.PrintWriter
--------------------------------------------------------------------------------
public class PrintWriter
extends Writer
Print formatted representations of objects to a text-output stream. This class implements all of the print methods found in PrintStream. Itdo
es not contain methods for writing raw bytes, for which a program should use unencoded byte streams.
Unlike the PrintStream class, if automatic flushing is enabled it will bedo
ne only when one of the println() methods is invoked, rather than whenever a newline character happens to be output. The println() methods use the platform's own notion of line separator rather than the newline character.
Methods in this class never throw I/O exceptions. The client may inquire as to whether any errors have occurred by invoking checkError().

Since:
JDK1.1
--------------------------------------------------------------------------------
Field Summary
protected Writer out
The underlying character-output stream of this PrintWriter.
Fields inherited from class java.io.Writer
lock
Constructor Summary
PrintWriter(OutputStream out)
Create a new PrintWriter, without automatic line flushing, from an existing OutputStream.
PrintWriter(OutputStream out, boolean autoFlush)
Create a new PrintWriter from an existing OutputStream.
PrintWriter(Writer out)
Create a new PrintWriter, without automatic line flushing.
PrintWriter(Writer out, boolean autoFlush)
Create a new PrintWriter.
Method Summary
boolean checkError()
Flush the stream and check its error state.
void close()
Close the stream.
void flush()
Flush the stream.
void print(boolean b)
Print a boolean value.
void print(char c)
Print a character.
void print(char[] s)
Print an array of characters.
void print(double d)
Print ado
uble-precision floating-point number.
void print(float f)
Print a floating-point number.
void print(int i)
Print an integer.
void print(long l)
Print a long integer.
void print(Object obj)
Print an object.
void print(String s)
Print a string.
void println()
Terminate the current line by writing the line separator string.
void println(boolean x)
Print a boolean value and then
terminate the line.
void println(char x)
Print a character and then
terminate the line.
void println(char[] x)
Print an array of characters and then
terminate the line.
void println(double x)
Print ado
uble-precision floating-point number and then
terminate the line.
void println(float x)
Print a floating-point number and then
terminate the line.
void println(int x)
Print an integer and then
terminate the line.
void println(long x)
Print a long integer and then
terminate the line.
void println(Object x)
Print an Object and then
terminate the line.
void println(String x)
Print a String and then
terminate the line.
protected void setError()
Indicate that an error has occurred.
void write(char[] buf)
Write an array of characters.
void write(char[] buf, int off, int len)
Write a portion of an array of characters.
void write(int c)
Write a single character.
void write(String s)
Write a string.
void write(String s, int off, int len)
Write a portion of a string.
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Detail

out
protected Writer outThe underlying character-output stream of this PrintWriter.
Since:
1.2
Constructor Detail
PrintWriter
public PrintWriter(Writer out)Create a new PrintWriter, without automatic line flushing.
Parameters:
out - A character-output stream
--------------------------------------------------------------------------------
PrintWriter
public PrintWriter(Writer out,
boolean autoFlush)Create a new PrintWriter.
Parameters:
out - A character-output stream
autoFlush - A boolean;
if true, the println() methods will flush the output buffer
--------------------------------------------------------------------------------
PrintWriter
public PrintWriter(OutputStream out)Create a new PrintWriter, without automatic line flushing, from an existing OutputStream. This convenience constructor creates the necessary intermediate OutputStreamWriter, which will convert characters into bytes using the default character encoding.
Parameters:
out - An output stream
See Also:
OutputStreamWriter.OutputStreamWriter(java.io.OutputStream)
--------------------------------------------------------------------------------
PrintWriter
public PrintWriter(OutputStream out,
boolean autoFlush)Create a new PrintWriter from an existing OutputStream. This convenience constructor creates the necessary intermediate OutputStreamWriter, which will convert characters into bytes using the default character encoding.
Parameters:
out - An output stream
autoFlush - A boolean;
if true, the println() methods will flush the output buffer
See Also:
OutputStreamWriter.OutputStreamWriter(java.io.OutputStream)
Method Detail
flush
public void flush()Flush the stream.
Overrides:
flush in class Writer
Following copied from class: java.io.Writer
Throws:
IOException - If an I/O error occurs
--------------------------------------------------------------------------------
close
public void close()Close the stream.
Overrides:
close in class Writer
Following copied from class: java.io.Writer
Throws:
IOException - If an I/O error occurs
--------------------------------------------------------------------------------
checkError
public boolean checkError()Flush the stream and check its error state. Errors are cumulative;
once the stream encounters an error, this routine will return true on all successive calls.
Returns:
True if the print stream has encountered an error, either on the underlying output stream or during a format conversion.
--------------------------------------------------------------------------------
setError
protected void setError()Indicate that an error has occurred.
--------------------------------------------------------------------------------
write
public void write(int c)Write a single character.
Overrides:
write in class Writer
Following copied from class: java.io.Writer
Parameters:
c - int specifying a character to be written.
Throws:
IOException - If an I/O error occurs
--------------------------------------------------------------------------------
write
public void write(char[] buf,
int off,
int len)Write a portion of an array of characters.
Overrides:
write in class Writer
Following copied from class: java.io.Writer
Parameters:
cbuf - Array of characters
off - Offset from which to start writing characters
len - Number of characters to write
Throws:
IOException - If an I/O error occurs
--------------------------------------------------------------------------------
write
public void write(char[] buf)Write an array of characters. This method cannot be inherited from the Writer class because it must suppress I/O exceptions.
Overrides:
write in class Writer
Following copied from class: java.io.Writer
Parameters:
cbuf - Array of characters to be written
Throws:
IOException - If an I/O error occurs
--------------------------------------------------------------------------------
write
public void write(String s,
int off,
int len)Write a portion of a string.
Overrides:
write in class Writer
Following copied from class: java.io.Writer
Parameters:
str - A String
off - Offset from which to start writing characters
len - Number of characters to write
Throws:
IOException - If an I/O error occurs
--------------------------------------------------------------------------------
write
public void write(String s)Write a string. This method cannot be inherited from the Writer class because it must suppress I/O exceptions.
Overrides:
write in class Writer
Following copied from class: java.io.Writer
Parameters:
str - String to be written
Throws:
IOException - If an I/O error occurs
--------------------------------------------------------------------------------
print
public void print(boolean b)Print a boolean value. The string produced by String.valueOf(boolean) is translated into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
b - The boolean to be printed
--------------------------------------------------------------------------------
print
public void print(char c)Print a character. The character is translated into one or more bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
c - The char to be printed
--------------------------------------------------------------------------------
print
public void print(int i)Print an integer. The string produced by String.valueOf(int) is translated into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
i - The int to be printed
See Also:
Integer.toString(int)
--------------------------------------------------------------------------------
print
public void print(long l)Print a long integer. The string produced by String.valueOf(long) is translated into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
l - The long to be printed
See Also:
Long.toString(long)
--------------------------------------------------------------------------------
print
public void print(float f)Print a floating-point number. The string produced by String.valueOf(float) is translated into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
f - The float to be printed
See Also:
Float.toString(float)
--------------------------------------------------------------------------------
print
public void print(double d)Print ado
uble-precision floating-point number. The string produced by String.valueOf(double) is translated into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
d - Thedo
uble to be printed
See Also:
Double.toString(double)
--------------------------------------------------------------------------------
print
public void print(char[] s)Print an array of characters. The characters are converted into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
s - The array of chars to be printed
Throws:
NullPointerException - If s is null
--------------------------------------------------------------------------------
print
public void print(String s)Print a string. If the argument is null then
the string "null" is printed. Otherwise, the string's characters are converted into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
s - The String to be printed
--------------------------------------------------------------------------------
print
public void print(Object obj)Print an object. The string produced by the String.valueOf(Object) method is translated into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.
Parameters:
obj - The Object to be printed
See Also:
Object.toString()
--------------------------------------------------------------------------------
println
public void println()Terminate the current line by writing the line separator string. The line separator string is defined by the system property line.separator, and is not necessarily a single newline character ('/n').
--------------------------------------------------------------------------------
println
public void println(boolean x)Print a boolean value and then
terminate the line. This method behaves as though it invokes print(boolean) and then
println().
Parameters:
x - the boolean value to be printed
--------------------------------------------------------------------------------
println
public void println(char x)Print a character and then
terminate the line. This method behaves as though it invokes print(char) and then
println().
Parameters:
x - the char value to be printed
--------------------------------------------------------------------------------
println
public void println(int x)Print an integer and then
terminate the line. This method behaves as though it invokes print(int) and then
println().
Parameters:
x - the int value to be printed
--------------------------------------------------------------------------------
println
public void println(long x)Print a long integer and then
terminate the line. This method behaves as though it invokes print(long) and then
println().
Parameters:
x - the long value to be printed
--------------------------------------------------------------------------------
println
public void println(float x)Print a floating-point number and then
terminate the line. This method behaves as though it invokes print(float) and then
println().
Parameters:
x - the float value to be printed
--------------------------------------------------------------------------------
println
public void println(double x)Print ado
uble-precision floating-point number and then
terminate the line. This method behaves as though it invokes print(double) and then
println().
Parameters:
x - thedo
uble value to be printed
--------------------------------------------------------------------------------
println
public void println(char[] x)Print an array of characters and then
terminate the line. This method behaves as though it invokes print(char[]) and then
println().
Parameters:
x - the array of char values to be printed
--------------------------------------------------------------------------------
println
public void println(String x)Print a String and then
terminate the line. This method behaves as though it invokes print(String) and then
println().
Parameters:
x - the String value to be printed
--------------------------------------------------------------------------------
println
public void println(Object x)Print an Object and then
terminate the line. This method behaves as though it invokes print(Object) and then
println().
Parameters:
x - the Object value to be printed
--------------------------------------------------------------------------------
Overview Package Class Use Tree Deprecated Index Help
JavaTM 2 Platform
Std. Ed. v1.3
PREV CLASS NEXT CLASS FRAMES NO FRAMES
SUMMARY: INNER | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD
--------------------------------------------------------------------------------
Submit a bug or feature
For further API reference and developerdo
cumentation, see Java 2 SDK SE Developerdo
cumentation. Thatdo
cumentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Java, Java 2D, and JDBC are trademarks or registered trademarks of Sun Microsystems, Inc. in the US and other countries.
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.
 
谁能给一个具体的例子?
 
原文 http://www-900.ibm.com/developerWorks/cn/java/l-javaprint/index.shtml
3.1 打印文本
3.1.1 应用场景
假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印54行,如何实现呢?
3.1.2 解决方法
基本思路如下:首先我们需要实现Printable接口,然后按照每页最多54行的格式计算共需要打印多少页,当打印文本的按钮被点击时,执行相应的打印动作。打印文本的具体操作可通过Graphics2D的drawString方法来实现。
1、实现Printable接口
/*Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量单位,
1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点);page指明页号*/
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.black);
//设置打印颜色为黑色
if (page >= PAGES) //当打印页号大于需要打印的总页数时,打印工作结束
return Printable.NO_SUCH_PAGE;
g2.translate(pf.getImageableX(), pf.getImageableY());//转换坐标,确定打印边界
drawCurrentPageText(g2, pf, page);
//打印当前页文本
return Printable.PAGE_EXISTS;
//存在打印页时,继续打印工作
}
/*打印指定页号的具体文本内容*/
private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page)
{
String s = getDrawText(printStr)[page];//获取当前页的待打印文本内容
//获取默认字体及相应的尺寸
FontRenderContext context = g2.getFontRenderContext();
Font f = area.getFont();
String drawText;
float ascent = 16;
//给定字符点阵
int k, i = f.getSize(), lines = 0;
while(s.length() > 0 &&
lines < 54) //每页限定在54行以内
{
k = s.indexOf('/n');
//获取每一个回车符的位置
if (k != -1) //存在回车符
{
lines += 1;
//计算行数
drawText = s.substring(0, k);
//获取每一行文本
g2.drawString(drawText, 0, ascent);
//具体打印每一行文本,同时走纸移位
if (s.substring(k + 1).length() > 0)
{
s = s.substring(k + 1);
//截取尚未打印的文本
ascent += i;
}
}
else
//不存在回车符
{
lines += 1;
//计算行数
drawText = s;
//获取每一行文本
g2.drawString(drawText, 0, ascent);
//具体打印每一行文本,同时走纸移位
s = "";
//文本已结束
}
}
}
/*将打印目标文本按页存放为字符串数组*/
public String[] getDrawText(String s)
{
String[] drawText = new String[PAGES];//根据页数初始化数组
for (int i = 0;
i < PAGES;
i++)
drawText = "";
//数组元素初始化为空字符串

int k, suffix = 0, lines = 0;
while(s.length() > 0)
{
if(lines < 54) //不够一页时
{
k = s.indexOf('/n');
if (k != -1) //存在回车符
{
lines += 1;
//行数累加
//计算该页的具体文本内容,存放到相应下标的数组元素
drawText[suffix] = drawText[suffix] + s.substring(0, k + 1);
if (s.substring(k + 1).length() > 0)
s = s.substring(k + 1);
}
else
{
lines += 1;
//行数累加
//将文本内容存放到相应的数组元素
drawText[suffix] = drawText[suffix] + s;
s = "";
}
}
else
//已满一页时
{
lines = 0;
//行数统计清零
suffix++;
//数组下标加1
}
}
return drawText;
}

2、计算需要打印的总页数
public int getPagesCount(String curStr)
{
int page = 0;
int position, count = 0;
String str = curStr;
while(str.length() > 0) //文本尚未计算完毕
{
position = str.indexOf('/n');
//计算回车符的位置
count += 1;
//统计行数
if (position != -1)
str = str.substring(position + 1);
//截取尚未计算的文本
else
str = "";
//文本已计算完毕
}
if (count > 0)
page = count / 54 + 1;
//以总行数除以54获取总页数
return page;
//返回需打印的总页数
}

3.1、以jdk1.4以前的版本实现打印动作按钮监听,并完成具体的打印操作
private void printTextAction()
{
printStr = area.getText().trim();
//获取需要打印的目标文本
if (printStr != null &amp;&amp;
printStr.length() > 0) //当打印内容不为空时
{
PAGES = getPagesCount(printStr);
//获取打印总页数
PrinterJob myPrtJob = PrinterJob.getPrinterJob();
//获取默认打印作业
PageFormat pageFormat = myPrtJob.defaultPage();
//获取默认打印页面格式
myPrtJob.setPrintable(this, pageFormat);
//设置打印工作
if (myPrtJob.printDialog()) //显示打印对话框
{
try
{
myPrtJob.print();
//进行每一页的具体打印操作
}
catch(PrinterException pe)
{
pe.printStackTrace();
}
}
}
else
{
//如果打印内容为空时,提示用户打印将取消
JOptionPane.showConfirmDialog
(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);
}
}

3.2、以jdk1.4新版本提供的API实现打印动作按钮监听,并完成具体的打印操作
private void printText2Action()
{
printFlag = 0;
//打印标志清零
printStr = area.getText().trim();//获取需要打印的目标文本
if (printStr != null &amp;&amp;
printStr.length() > 0) //当打印内容不为空时
{
PAGES = getPagesCount(printStr);
//获取打印总页数
//指定打印输出格式
do
cFlavor flavor =do
cFlavor.SERVICE_FORMATTED.PRINTABLE;
//定位默认的打印服务
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
//创建打印作业
DocPrintJob job = printService.createPrintJob();
//设置打印属性
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
do
cAttributeSet das = new HashDocAttributeSet();
//指定打印内容
Docdo
c = new SimpleDoc(this, flavor, das);
//不显示打印对话框,直接进行打印工作
try
{
job.print(doc, pras);
//进行每一页的具体打印操作
}
catch(PrintException pe)
{
pe.printStackTrace();
}
}
else
{
//如果打印内容为空时,提示用户打印将取消
JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE);
}
}

 
后退
顶部