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

有关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条回答 默认 最新

  • iteye_18288 2011-03-15 21:34
    关注

    哦,了解了,Qq聊。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线