A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王春蕾 中级黑马   /  2014-5-10 21:45  /  1170 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
  1. package com.test;  
  2.   
  3. import java.awt.Component;  
  4. import java.awt.Font;  
  5. import java.awt.Graphics;  
  6. import java.awt.Graphics2D;  
  7. import java.awt.print.PageFormat;  
  8. import java.awt.print.Printable;  
  9. import java.awt.print.PrinterException;  
  10. import java.awt.print.PrinterJob;  
  11.   
  12. import javax.print.PrintService;  
  13. import javax.print.PrintServiceLookup;  
  14. import javax.print.attribute.HashAttributeSet;  
  15. import javax.print.attribute.HashPrintRequestAttributeSet;  
  16. import javax.print.attribute.PrintRequestAttributeSet;  
  17. import javax.print.attribute.standard.Copies;  
  18. import javax.print.attribute.standard.MediaPrintableArea;  
  19. import javax.print.attribute.standard.MediaSizeName;  
  20. import javax.print.attribute.standard.OrientationRequested;  
  21. import javax.print.attribute.standard.PrinterName;  
  22. import javax.swing.JFrame;  
  23. import javax.swing.JPanel;  
  24. import javax.swing.JTable;  
  25. import javax.swing.JTextArea;  
  26. import javax.swing.table.TableCellRenderer;  
  27. import javax.swing.table.TableColumn;  
  28.   
  29. public class Te extends JFrame {  
  30.     private PrintRequestAttributeSet attributes;  
  31.   
  32.     public Te() {  
  33.         try {  
  34.   
  35.             attributes = new HashPrintRequestAttributeSet();  
  36.             PrinterJob job = PrinterJob.getPrinterJob();  
  37.             attributes.add(new Copies(1)); // 设置打印分数  
  38.             attributes.add(OrientationRequested.PORTRAIT); // 设置打印方向  
  39.             attributes.add(MediaSizeName.ISO_A6); // 设置打印纸装  
  40.             HashAttributeSet hs = new HashAttributeSet();  
  41.             hs.add(new PrinterName("zhushi", null));  
  42.             PrintService[] pss = PrintServiceLookup.lookupPrintServices(null, hs);  
  43.             job.setPrintService(pss[0]);  
  44.             PrintPanel printTable = new  PrintPanel();   
  45.             int hei = printTable.getHeight2();  
  46.             attributes.add(new MediaPrintableArea(0,0,58,hei,MediaPrintableArea.MM));   //设置打印纸装大小  
  47.             job.setPrintable(printTable);  
  48.             job.print(attributes);  
  49.         } catch (Exception e) {  
  50.   
  51.         }  
  52.   
  53.     }  
  54.   
  55.     /**
  56.      * @param args
  57.      */  
  58.     public static void main(String[] args) {  
  59.         // TODO Auto-generated method stub  
  60.         System.out.println(1212);  
  61.         Te te = new Te();  
  62.   
  63.     }  
  64.   
  65.   
  66. }  
  67.   
  68. class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer {  
  69.     public TableCellTextAreaRenderer() {  
  70.         setLineWrap(true);  
  71.         setWrapStyleWord(true);  
  72.     }  
  73.       
  74.     public Component getTableCellRendererComponent(JTable table, Object value,  
  75.             boolean isSelected, boolean hasFocus, int row, int column) {  
  76.         // 计算当下行的最佳高度  
  77.         int maxPreferredHeight = 0;  
  78.         for (int i = 0; i < table.getColumnCount(); i++) {  
  79.             setText("" + table.getValueAt(row, i));  
  80.             setSize(table.getColumnModel().getColumn(column).getWidth(), 0);  
  81.             maxPreferredHeight = Math.max(maxPreferredHeight,  
  82.                     getPreferredSize().height);  
  83.         }  
  84.   
  85.         if (table.getRowHeight(row) != maxPreferredHeight) // 少了这行则处理器瞎忙  
  86.             table.setRowHeight(row, maxPreferredHeight);  
  87.   
  88.         setText(value == null ? "" : value.toString());  
  89.         System.err.println(value+" vvvvvvvvvvvvvv");  
  90.         System.err.println(maxPreferredHeight+" sssssssssssssssssss");  
  91.         /*hei += maxPreferredHeight;
  92.         System.out.println(hei);*/  
  93.         return this;  
  94.     }  
  95. //  public static int hei =0;  
  96. //  public int getHei(JTable table, Object value,  
  97. //          boolean isSelected, boolean hasFocus, int row, int column) {  
  98. //      // 计算当下行的最佳高度  
  99. //      int maxPreferredHeight = 0;  
  100. //      for (int i = 0; i < table.getColumnCount(); i++) {  
  101. //          setText("" + table.getValueAt(row, i));  
  102. //          setSize(table.getColumnModel().getColumn(column).getWidth(), 0);  
  103. //          maxPreferredHeight = Math.max(maxPreferredHeight,  
  104. //                  getPreferredSize().height);  
  105. //      }  
  106. //      return hei += maxPreferredHeight;  
  107. //  }  
  108. }  
  109. class PrintPanel extends JPanel implements Printable{  
  110.     @Override  
  111.     public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)  
  112.             throws PrinterException {  
  113.         if (pageIndex >= 1) return Printable.NO_SUCH_PAGE;  
  114.             Graphics2D g2 = (Graphics2D) graphics;  
  115.             g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());  
  116.             drawPage1(graphics);  
  117.         return Printable.PAGE_EXISTS;  
  118.     }  
  119.       
  120.     public void drawPage1(Graphics g2){  
  121.          JTable table   =   new   JTable(8,3);   
  122.          TableColumn column=null;  
  123.          table.setFont(new Font("Dialog ",   0,   12));  
  124.          table.getColumnModel().getColumn(0).setMinWidth(100);  
  125.          table.setModel(new  javax.swing.table.DefaultTableModel(   
  126.                 getObject(),  
  127.                  new String[] {"","",""}   
  128.          )   {   
  129.                  boolean[] canEdit   = new   boolean[]  
  130.                          {true,true,true};   
  131.          });  
  132. //       table.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());  
  133.          table.setSize(table.getPreferredSize());  
  134.          table.setShowGrid (false);//是否显示网格线  
  135.          table.setShowHorizontalLines (false);//是否显示水平的网格线  
  136.          table.setShowVerticalLines (false);//是否显示垂直的网格线  
  137.          table.paint(g2);  
  138.     }  
  139.     public Object[][] getObject() {  
  140.         Object[][] os = new Object[13][3];  
  141.         for (int i = 0; i < 2; i++) {  
  142.             os[i][0] =  "里单元格里单元格";  
  143.             os[i][1] = "里单元格";  
  144.             os[i][2] = "";  
  145.         }  
  146.         return os;  
  147.     }  
  148.       
  149.     public int getHeight2() {  
  150.          JTable table   =   new   JTable(8,3);   
  151.          TableColumn column=null;  
  152.          table.setFont(new Font("Dialog ",   0,   12));  
  153.          table.getColumnModel().getColumn(0).setMinWidth(100);  
  154.          table.setModel(new  javax.swing.table.DefaultTableModel(   
  155.                 getObject(),  
  156.                  new String[] {"","",""}   
  157.          )   {   
  158.                  boolean[] canEdit   = new   boolean[]  
  159.                          {true,true,true};   
  160.          });  
  161.          table.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());  
  162.          table.setSize(table.getPreferredSize());  
  163.          table.setShowGrid (false);//是否显示网格线  
  164.          table.setShowHorizontalLines (false);//是否显示水平的网格线  
  165.          table.setShowVerticalLines (false);//是否显示垂直的网格线  
  166.          System.out.println(5*table.getRowCount()+"5*table.getRowCount()");  
  167.          return 5*table.getRowCount();  
  168.     }  
  169. }
复制代码

我本机上装了一个PDF虚拟打印机。

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

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

请各位指教! 谢谢!!!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马