-
Java 打印字符串5
我首次接触Java打印,我想打印一个我在程序中拼的字符串。请问该怎么实现???
问题补充:
上一站,火星的答案,我已经测试过这种方式。目前我想这样实现,代码如下:
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob dpj = service.createPrintJob();
String str = "我要测试一下打印机,哈哈哈哈哈哈哈哈哈哈哈哈哈哈!";
InputStream inputStream = new ByteArrayInputStream(str.getBytes());
Doc doc = new SimpleDoc(inputStream, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
PrintRequestAttributeSet praSet = new HashPrintRequestAttributeSet();
praSet.add(MediaSizeName.ISO_A4);
praSet.add(new Copies(1));
try {
dpj.print(doc, praSet);
} catch (PrintException e) {
e.printStackTrace();
}
问题补充:
这种方式可以调用打印机,但是打印机不打印数据。请问这是什么原因?
问题补充:
火星,你好!谢谢你的耐心解答。你刚才的答案,这种方式我也测试过,打印GIF,文件都可以。但是好像在程序拼接的字符串唯独不可以,这应该跟DocFlavor文档数据类型有关系。难道只能把字符串回到2D
图形上打印??
问题补充:
这种类型,打印机不支持。错误如下:
sun.print.PrintJobFlavorException: invalid flavor
at sun.print.Win32PrintJob.print(Win32PrintJob.java:296)
at com.haoqingwei.example.print.PrintDemo.main(PrintDemo.java:61)
我的打印机支持一下DocFlavor类型:
MediaSubtype:******gif
MediaType:******image
MimeType:******image/gif
RepresentationClassName:******[B
=================================================================
MediaSubtype:******gif
MediaType:******image
MimeType:******image/gif
RepresentationClassName:******java.io.InputStream
=================================================================
MediaSubtype:******gif
MediaType:******image
MimeType:******image/gif
RepresentationClassName:******java.net.URL
=================================================================
MediaSubtype:******jpeg
MediaType:******image
MimeType:******image/jpeg
RepresentationClassName:******[B
=================================================================
MediaSubtype:******jpeg
MediaType:******image
MimeType:******image/jpeg
RepresentationClassName:******java.io.InputStream
=================================================================
MediaSubtype:******jpeg
MediaType:******image
MimeType:******image/jpeg
RepresentationClassName:******java.net.URL
=================================================================
MediaSubtype:******png
MediaType:******image
MimeType:******image/png
RepresentationClassName:******[B
=================================================================
MediaSubtype:******png
MediaType:******image
MimeType:******image/png
RepresentationClassName:******java.io.InputStream
=================================================================
MediaSubtype:******png
MediaType:******image
MimeType:******image/png
RepresentationClassName:******java.net.URL
=================================================================
MediaSubtype:******x-java-jvm-local-objectref
MediaType:******application
MimeType:******application/x-java-jvm-local-objectref
RepresentationClassName:******java.awt.print.Pageable
=================================================================
MediaSubtype:******x-java-jvm-local-objectref
MediaType:******application
MimeType:******application/x-java-jvm-local-objectref
RepresentationClassName:******java.awt.print.Printable
=================================================================
MediaSubtype:******octet-stream
MediaType:******application
MimeType:******application/octet-stream
RepresentationClassName:******[B
=================================================================
MediaSubtype:******octet-stream
MediaType:******application
MimeType:******application/octet-stream
RepresentationClassName:******java.net.URL
=================================================================
MediaSubtype:******octet-stream
MediaType:******application
MimeType:******application/octet-stream
RepresentationClassName:******java.io.InputStream
=================================================================2008年11月15日 08:58
7个答案 按时间排序 按投票排序
-
采纳的答案
打印工作常包含两部分:
* 作业控制——创建一个打印作业,将它连接到打印机,指定打印的副本数,用户打印对话交互。
* 页面成像——将内容绘制到页面,并管理超出页面的内容。
首先,创建一个打印任务。这个类代表了一个打印任务,大部分相关的类都位于java.awt.print包中。import java.awt.print.*; PrinterJob job = PrinterJob.getPrinterJob();
接着,提供代码实现Printable接口将内容呈递给页面。class HelloWorldPrinter implements Printable {…} …… job.setPrintable(new HelloWorldPrinter());
一个应用程序通常会显示一个打印对话框,用户可以通过它改变各种选项,例如:设置打印副本数目,页面方向,或者目标打印机。
boolean doPrint = job.printDialog();
这个对话框一直显示直到用户批准打印或者取消打印。如果用户给出命令去继续打印,变量doPrint将会为true。如果用户取消了打印,doPrint为false。因为显示这个对话框完全是可选的,所以返回值纯粹是提供信息的。
如果doPrint变量为true,程序将通过调用PrinterJob.print方法来让作业执行打印请求。if (doPrint) { try { job.print(); } catch (PrinterException e) { /* The job did not successfully complete */ } }
如果在将作业传递给打印机过程中出现问题时,PrinterException将被抛出。然而,因为PrinterJob.print方法在将作业传递给打印机后立即返回,所以用户的程序无法检测到夹纸或缺纸这些问题。这个打印作业控制样本对基本的打印用户已经足够了。
Printable接口只有一个方法:public int print(Graphics graphics, PageFormat pf, int page) throws PrinterException;
PageFormat类描述了页面的定位信息、它的尺寸以及每英尺可绘制的区域(单位1/72nd)。可绘制区解释了大多数打印机的边界限制(硬件边界)。可绘区是位于这些边界之内的区域,实际应用中,经常为留出页眉和页脚而进一步限制这些边界。
page参数是一个从0开始的页面编号。
下面的代码展示了完整的Printable接口实现:import java.awt.print.*; import java.awt.*; public class HelloWorldPrinter implements Printable { 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()); g.drawString("Hello World!", 100, 100); return PAGE_EXISTS; } }
发送一个图形实例到打印机本质上和将它发送到屏幕上一样。这两种情况你都需要做如下步骤:
* 向一个二维图形绘制内容的其它操作,像绘制测试字符串一样容易。
* 打印图形要一个很高的分辨率,这应该对大多数代码是透明的。
* Printable.print()方法被打印系统调用,就像在屏幕上显示空间时调用Component.praint()一样。打印系统将为页面0,1,……调用Printable.print()方法,知道返回NO_SUCH_PAGE.
* print()方法可以被同一个页面调用很多次,知道文档完成。这一特性将在用户指定打印多个副本时用到。
* PageFormat的可绘制区域决定了剪切区域。可打印区域在计算分页数或如何控制打印内容的范围时同样很重要,因为分页符是通过每页适应的程度来定义。
提示:对某些页面索引,print()方法可能会跳过,如果用户指定了不同的页面范围,指定了某些不被包含在内的特定页面索引。
2008年11月15日 09:16
-
DocFlavor类型我也看了,貌似DocFlavor.INPUT_STREAM.AUTOSENSE也是可以的。可以试试这个DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_8
2008年11月15日 10:02
-
看了下文档,你的代码貌似没啥问题:
以下代码示例说明了 Java Print Service API 的典型用法:找到可在 A4 大小的纸张上打印 5 份 Postscript 文档双面副本的打印机、根据某个返回的 PrintService 创建 PrintJob 并调用 print 方法。FileInputStream psStream; try { psStream = new FileInputStream("file.ps"); } catch (FileNotFoundException ffne) { } if (psStream == null) { return; } DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT; Doc myDoc = new SimpleDoc(psStream, psInFormat, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(new Copies(5)); aset.add(MediaSize.A4); aset.add(Sides.DUPLEX); PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); if (services.length > 0) { DocPrintJob job = services[0].createPrintJob(); try { job.print(myDoc, aset); } catch (PrintException pe) {} }
http://download.developers.sun.com.cn/javadoc/jdk6/docs/zh/api/javax/print/package-summary.html
2008年11月15日 09:39
-
A Basic Printing Program
http://java.sun.com/docs/books/tutorial/2d/printing/printable.html2008年11月15日 09:17
-
引用我首次接触Java打印,我想打印一个我在程序中拼的字符串。请问该怎么实现???
什么意思?打印到控制台??System.out.println("你的字符串");
2008年11月15日 09:12
相关推荐
java JAVA数组与字符串,编写图形界面的程序,接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印新生成的字符串。 String 类或StringBuffer类 deleteCharAt方法
java接收用户输入的一个字符串和一个字符,将字符串中出现的所有该字符删除,打印新生成的字符串。
java程序,从键盘输入字符串知道按确定键结束输入,将字符串保存于一个文件中,再从文件读取出来进行排序,将排序后的字符串保存在另一个文件中,从屏幕打印出排序后的字符串。
C语言 输入一行字符串,将其中的数字删除,打印其余字符
主要介绍了java基础-给出一个随机字符串,判断有多少字母?多少数字?文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
详细: 1. 输入一串字符串生成一串16进制编码 2. 有可能生成的最后一个编码是没有用的 3. 用处:例如打印时需要传16进制编码测试一下就可以用上。
每个 Java 程序都会为您提供不同的方法来解决 Java 中的特定问题。如果您是 Java 编程新手,我们强烈建议您阅读有关Java 教程的文章,其中我们通过实际示例和程序介绍了 Java 编程的所有基础知识和高级主题。
有如下的一个字符串 String str = “QWERTYUIQQQWJHDAADADBBBBCAD”; 请统计出其中每一个字母出现的次数,在控制台打印如下的格式: A----3 B----4 C----1 D----2 请打印出字母次数最多的那一对
编写一个方法(名字自定,但要符合Java编码规范),方法内打印一字符串,并在main()方法内调用它。
3、 按字典序 如果第一个字符串大于第二个字符串 返回大于0,如果第一个字符串等于第二个字符串 返回等于0 ,如果第一个字符串小于第二个字符串返回小于0。 4、例子 compareToIgnoreCase("HARD","hark")...
写的用于扩展C++中的字符串类的一个类,使用了vs,主要是为字符串操作增加如Java中的那些方法
java笔试题,包括了判断及程序书写,包含了很多方面,类的继承、static、日期打印、字符串处理等
我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出 256种状态,这被称为一个字节(byte)。 也就是说,一个字节一共...
创建一个JAVA程序以根据空格拆分字符串,在拆分操作之后,打印具有最小长度的字符串。 创建一个JAVA程序以基于空格拆分字符串,在拆分操作之后,按字典顺序打印所有字符串。 使用JAVA切换字符串。 切换是将大写...
java代码-找出字符串中的大写字母并打印输出
字符串采用UTF-8编码获得byte数组,保证两端通用,如果应用对编码有要求,两端同时改为其他编码方式也可以 从Java和C#的代码看,两者代码上有细微差别,但是思路方面两者基本是一样的 另外一个备忘,Java里边,...
从键盘接受一个数字,列出... 2、然后将传入的数字转换成字符串,并且求出字符串的长度, 3、根据求出的的字符串长度,调用pow方法,计算出传入数字的最高位位权值 4、通过循环对传入数字取余操作,打印输出