FCPL-lt
2011-03-12 17:42
采纳率: 33.3%
浏览 327
已采纳

有关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 stub
        System.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{
    @Override
    public 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虚拟打印机。

以上是测试类的代码,请各位指点一二。

如何让打印的内容过长也全部打印出来。 不管我怎么调打印都不全。。

请各位指教! 谢谢!!!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

相关推荐 更多相似问题