有关java打印问题。。。。

问题描述

package com.test;import java.awt.Component;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 java.awt.print.PrinterJob;import javax.print.PrintService;import javax.print.PrintServiceLookup;import javax.print.attribute.HashAttributeSet;import javax.print.attribute.HashPrintRequestAttributeSet;import javax.print.attribute.PrintRequestAttributeSet;import javax.print.attribute.standard.Copies;import javax.print.attribute.standard.MediaPrintableArea;import javax.print.attribute.standard.MediaSizeName;import javax.print.attribute.standard.OrientationRequested;import javax.print.attribute.standard.PrinterName;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.table.TableCellRenderer;import javax.swing.table.TableColumn;public class Te extends JFrame {private PrintRequestAttributeSet attributes;public Te() {try {attributes = new HashPrintRequestAttributeSet();PrinterJob job = PrinterJob.getPrinterJob();attributes.add(new Copies(1)); // 设置打印分数attributes.add(OrientationRequested.PORTRAIT); // 设置打印方向attributes.add(MediaSizeName.ISO_A6); // 设置打印纸装HashAttributeSet hs = new HashAttributeSet();hs.add(new PrinterName("zhushi", null));PrintService[] pss = PrintServiceLookup.lookupPrintServices(null, hs);job.setPrintService(pss[0]);PrintPanel printTable = new PrintPanel(); int hei = printTable.getHeight2();attributes.add(new MediaPrintableArea(0,0,58,hei,MediaPrintableArea.MM));//设置打印纸装大小job.setPrintable(printTable);job.print(attributes);} catch (Exception e) {}}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(1212);Te te = new Te();}}class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer {public TableCellTextAreaRenderer() {setLineWrap(true);setWrapStyleWord(true);}public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {// 计算当下行的最佳高度int maxPreferredHeight = 0;for (int i = 0; i < table.getColumnCount(); i++) {setText("" + table.getValueAt(row, i));setSize(table.getColumnModel().getColumn(column).getWidth(), 0);maxPreferredHeight = Math.max(maxPreferredHeight,getPreferredSize().height);}if (table.getRowHeight(row) != maxPreferredHeight) // 少了这行则处理器瞎忙table.setRowHeight(row, maxPreferredHeight);setText(value == null ? "" : value.toString());System.err.println(value+" vvvvvvvvvvvvvv");System.err.println(maxPreferredHeight+" sssssssssssssssssss");/*hei += maxPreferredHeight;System.out.println(hei);*/return this;}//public static int hei =0;//public int getHei(JTable table, Object value,//boolean isSelected, boolean hasFocus, int row, int column) {//// 计算当下行的最佳高度//int maxPreferredHeight = 0;//for (int i = 0; i < table.getColumnCount(); i++) {//setText("" + table.getValueAt(row, i));//setSize(table.getColumnModel().getColumn(column).getWidth(), 0);//maxPreferredHeight = Math.max(maxPreferredHeight,//getPreferredSize().height);//}//return hei += maxPreferredHeight;//}}class PrintPanel extends JPanel implements Printable{@Overridepublic int print(Graphics graphics, PageFormat pageFormat, int pageIndex)throws PrinterException {if (pageIndex >= 1) return Printable.NO_SUCH_PAGE; Graphics2D g2 = (Graphics2D) graphics; g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); drawPage1(graphics);return Printable.PAGE_EXISTS;}public void drawPage1(Graphics g2){ JTable table = new JTable(8,3); TableColumn column=null; table.setFont(new Font("Dialog ", 0, 12)); table.getColumnModel().getColumn(0).setMinWidth(100); table.setModel(new javax.swing.table.DefaultTableModel( getObject(), new String[] {"","",""} ) { boolean[] canEdit = new boolean[] {true,true,true}; });// table.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer()); table.setSize(table.getPreferredSize()); table.setShowGrid (false);//是否显示网格线 table.setShowHorizontalLines (false);//是否显示水平的网格线 table.setShowVerticalLines (false);//是否显示垂直的网格线 table.paint(g2);}public Object[][] getObject() {Object[][] os = new Object[13][3];for (int i = 0; i < 2; i++) {os[i][0] = "里单元格里单元格";os[i][1] = "里单元格";os[i][2] = "";}return os;}public int getHeight2() { JTable table = new JTable(8,3); TableColumn column=null; table.setFont(new Font("Dialog ", 0, 12)); table.getColumnModel().getColumn(0).setMinWidth(100); table.setModel(new javax.swing.table.DefaultTableModel( getObject(), new String[] {"","",""} ) { boolean[] canEdit = new boolean[] {true,true,true}; }); table.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer()); table.setSize(table.getPreferredSize()); table.setShowGrid (false);//是否显示网格线 table.setShowHorizontalLines (false);//是否显示水平的网格线 table.setShowVerticalLines (false);//是否显示垂直的网格线 System.out.println(5*table.getRowCount()+"5*table.getRowCount()"); return 5*table.getRowCount();}} 我本机上装了一个PDF虚拟打印机。以上是测试类的代码,请各位指点一二。如何让打印的内容过长也全部打印出来。 不管我怎么调打印都不全。。请各位指教! 谢谢!!! 问题补充:非常感谢你的帮忙,可以我想要的不是这种。可能是我没有说明白吧! 我指的是每一个单元格里的内容如果过长就打印不全! 就比如&nbsp; 打印“单位格内容单位格内容”&nbsp; 如果字长超过了6个字符就心...表示了! 我想让它自动换行。。。

解决方案

哦,了解了,Qq聊。
解决方案二:
这主要是计算分页的问题。这里写死了,所以总共就打印一页,多的内容就憋到页面外面去了。引用if (pageIndex >= 1) return Printable.NO_SUCH_PAGE;这玩意貌似要根据每页的高度,每行文字的高度来计算出每页可以打印多少行,然后再在print方法里根据pageIndex画出当前页的文本内容。我改写了一下你的PrintPanel类,可以支持多页打印,做例子供参考一下吧,希望能帮的上忙,呵呵。参考资料:http://download.oracle.com/javase/tutorial/2d/printing/set.htmlclass PrintPanel extends JPanel implements Printable {private int[] pageBreaks;//每个分页的开始行号private String[][] lineContents = null;//打印的文本内容private int linesPerPage = 20;//每页的行数,默认20private boolean inited = false;//分页属性是否已初始化public PrintPanel() {initLineContents();}@Overridepublic int print(Graphics graphics, PageFormat pageFormat, int pageIndex)throws PrinterException {if(!inited) {initPageProperties(graphics, pageFormat);}if (pageIndex > pageBreaks.length) {return NO_SUCH_PAGE;}Graphics2D g2 = (Graphics2D) graphics;g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());drawPage1(graphics, getLineContentsByPageIndex(pageIndex));return Printable.PAGE_EXISTS;}public void drawPage1(Graphics g2, String[][] lines) {JTable table = new JTable(8, 3);TableColumn column = null;table.setFont(new Font("Dialog", 0, 12));table.getColumnModel().getColumn(0).setMinWidth(100);table.setModel(new javax.swing.table.DefaultTableModel(lines,new String[] { "", "", "" }) {boolean[] canEdit = new boolean[] { true, true, true };});// table.setDefaultRenderer(Object.class, new// TableCellTextAreaRenderer());table.setSize(table.getPreferredSize());table.setShowGrid(false);// 是否显示网格线table.setShowHorizontalLines(false);// 是否显示水平的网格线table.setShowVerticalLines(false);// 是否显示垂直的网格线table.paint(g2);}public int getHeight2() {JTable table = new JTable(8, 3);TableColumn column = null;table.setFont(new Font("Dialog ", 0, 12));table.getColumnModel().getColumn(0).setMinWidth(100);table.setModel(new javax.swing.table.DefaultTableModel(lineContents,new String[] { "", "", "" }) {boolean[] canEdit = new boolean[] { true, true, true };});table.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());table.setSize(table.getPreferredSize());table.setShowGrid(false);// 是否显示网格线table.setShowHorizontalLines(false);// 是否显示水平的网格线table.setShowVerticalLines(false);// 是否显示垂直的网格线System.out.println(5 * table.getRowCount() + "5*table.getRowCount()");return 5 * table.getRowCount();}//初始化打印内容private void initLineContents() {lineContents = new String[131][3];for (int i = 0; i < 131; i++) {lineContents[i][0] = i + "里单元格里单元格";lineContents[i][1] = "里单元格";lineContents[i][2] = "";}}//初始化分页属性private void initPageProperties(Graphics graphics, PageFormat pageFormat) {//计算每行高度Font font = new Font("Dialog", 0, 12);FontMetrics metrics = graphics.getFontMetrics(font);int lineHeight = metrics.getHeight();//计算分页linesPerPage = (int) (pageFormat.getImageableHeight() / lineHeight - 1);int numBreaks = (lineContents.length - 1) / linesPerPage;pageBreaks = new int[numBreaks];for (int b = 0; b < numBreaks; b++) {pageBreaks[b] = (b + 1) * linesPerPage;}inited = true;}//获取当前页的打印内容private String[][] getLineContentsByPageIndex(int pageIndex) {int start = (pageIndex == 0) ? 0 : pageBreaks[pageIndex - 1];int end = (pageIndex == pageBreaks.length) ? lineContents.length: pageBreaks[pageIndex];String[][] res = new String[end - start][];for (int i = 0, line = start; line < end; line++, i++) {res[i] = lineContents[line];}return res;}}

时间: 2024-11-01 14:14:08

有关java打印问题。。。。的相关文章

关于java打印方面的问题

问题描述 关于java打印方面的问题 java打印技术都有哪些呢? 最近在做仓库管理系统, 关于打印面单方面,我还存在这一些疑问,请高手指点? 解决方案 你说的应该是B/S的吧,我之前系统也有用到,用的是lodoop的,免费,功能强!推荐给你. 解决方案二: 可以搜索一下 java怎样调用本机的打印机 貌似代码很简洁 ,以前遇到过也是这样弄的!

Java打印程序设计全攻略

前言 在我们的实际工作中,经常需要实现打印功能.但由于历史原因,Java提供的打印功能一直都比较弱.实际上最初的jdk根本不支持打印,直到jdk1.1才引入了很轻量的打印支持.所以,在以前用Java/Applet/JSP/Servlet设计的程序中,较复杂的打印都是通过调用ActiveX/OCX控件或者VB/VC程序来实现的,非常麻烦.实际上,SUN公司也一直致力于Java打印功能的完善,而Java2平台则终于有了一个健壮的打印模式的开端,该打印模式与Java2D图形包充分结合成一体.更令人鼓舞

打印 特殊字符文字-java 打印特殊字符拼接的文字

问题描述 java 打印特殊字符拼接的文字 最近忽然突发奇想,能不能用java打印特殊字符拼接的文字效果如下,不知有没有大神能实现 解决方案 这个关键是要能获取点阵的坐标信息,有一个二维坐标数组,输出成这种就很简单了 解决方案二: 这个很简单啊,就是不停地用System. out. print(""@""),按你这个规律打印.只要你有耐心,没有技术难点的,就是逐行打印,计算好间隔空格. 解决方案三: int[][] y = {{010}{101}{010}}; in

java打印不出来最大值最小值啊 为什么啊

问题描述 java打印不出来最大值最小值啊 为什么啊 int[] sjava ={ s1.getSJava(), s2.getSJava(), s3.getSJava(), s4.getSJava(), s5.getSJava() }; int max=a; for(int i=0;i<5;i++){ //完成排序 for(j=0;j<=5-i-1;j++) if(sjava[j]>sjava[j+1]){ a=sjava[j]; sjava[j]=sjava[j+1]; sjava[i

分享java打印简单图形的实现代码_java

我们平时都是使用的画图工具进行简单图形的绘制,今天我们使用java打印一些简单的图形 实现代码如下 package test; /** * * @author hanzel * @打印图形 * */ public class Array { public static void main(String[] args) { //打印长方形 int[] a = new int[10]; for(int i=0 ;i<a.length;i++){ for(int j=0;j<a.length;j++

递归原理-java 递归 有一个数组 1,2,2,3,5 用java打印出所有不同的排列顺序

问题描述 java 递归 有一个数组 1,2,2,3,5 用java打印出所有不同的排列顺序 有一个数组 1,2,2,3,5 用java打印出所有不同的排列顺序:如12235,12325,13225

图片打印报错-java打印图片报 java.lang.ArrayIndexOutOfBoundsException: 6

问题描述 java打印图片报 java.lang.ArrayIndexOutOfBoundsException: 6 public class Print { public static void main(String[] args) { FileInputStream fin=null; try { fin = new FileInputStream("D:/image/image1.jpg"); } catch (FileNotFoundException e) { // TOD

word-如何用java打印Excel或者Word?数据是从数据库中来的

问题描述 如何用java打印Excel或者Word?数据是从数据库中来的 急急急!!哪位大神知道怎么用java打印成Excel表格或者Word文档,数据都是 从数据库中来的,现在有很多都需要打印功能,但是我不知道有什么辅助工具或者插件什么的,求指点 解决方案 poi和jxl都可以 解决方案二: poi和jxl都可以 解决方案三: 百度一下 java toexcel 范例有很多 解决方案四: poi ,可以给你例子.. 解决方案五: java有POI工具来操作Excel的,可以用java纯后台程序

数字-Java打印String类型的问题

问题描述 Java打印String类型的问题 代码是这样的: System.out.println( "我的的兑换码为:" + DigestUtils.shaHex("001")); 这是一个加密的,内容必须是String类型,但是我需要批量打印,而且是int类型的自增,如: 001,002,003到010,这样的一系列的数字的加密,求支招 解决方案 public static void main(String[] args){ String pattern=&qu

用java打印圆形的思路

问题描述 用java打印圆形的思路 我在网上找了一个用java打印圆的代码,试了一下可以. 我搞不懂的是,这段int x =(int) (r - Math.round(Math.sqrt((2 * r * i - i * i))))" 里的x是什么变量,还有2 * r * i - i * i"求的是圆的什么值 解决方案 java打印菱形思路---------------------- 解决方案二: 看看人家的博客,里面有注解,很详细http://blog.csdn.net/srx942