java - print - no imprimir encabezado y pie de pagina en html
Imprimir encabezados y pies de página en color? (4)
Intento crear encabezados y pies de página de colores al imprimir una JTable. Específicamente, estoy buscando getPrintable () en javax.swing.JTable, pero MessageFormat no me da la opción de especificar el color del encabezado o pie de página.
¿Cómo puedo hacerlo?
aclaración Estoy interesado en configurar el encabezado / pie de página mientras imprimo. Por ejemplo, el bloc de notas agrega el nombre del archivo como encabezado a lo que imprime.
actualización Parece que no hay una forma estándar de hacer esto, ¿alguien puede darme algunas soluciones? La única respuesta publicada hasta ahora no tiene nada que ver con la impresión (como enviar a una impresora, no mostrar a la pantalla) encabezado / pie de página.
Copiado de mi comentario: estoy interesado en el encabezado / pie de página de impresión. Por ejemplo, cuando imprime un documento desde el bloc de notas, agrega el nombre del archivo como encabezado (o tal vez es el pie de página, no recuerdo exactamente)
Este código es principalmente de www.java2s.com con cambios para mostrar cómo cambiar el color. No es la solución más bonita, pero con suerte te ayudará.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class MainClass {
public static void main(String args[]) {
String rows[][] = { { "A", "a" }, { "B", "b" }, { "E", "e" } };
String headers[] = { "Upper", "Lower" };
JFrame frame = new JFrame("Label Header");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable table = new JTable(rows, headers);
JScrollPane scrollPane = new JScrollPane(table);
Border headerBorder = UIManager.getBorder("TableHeader.cellBorder");
JLabel headerLabel1 = new JLabel(headers[0], JLabel.CENTER);
headerLabel1.setBorder(headerBorder);
// Here is where the color is changed.
headerLabel1.setBackground(new Color(255, 0, 0));
headerLabel1.setForeground(new Color(0, 0, 255));
// End of color change.
JLabel headerLabel2 = new JLabel(headers[1], JLabel.CENTER);
headerLabel2.setBorder(headerBorder);
TableCellRenderer renderer = new JComponentTableCellRenderer();
TableColumnModel columnModel = table.getColumnModel();
TableColumn column0 = columnModel.getColumn(0);
TableColumn column1 = columnModel.getColumn(1);
column0.setHeaderRenderer(renderer);
column0.setHeaderValue(headerLabel1);
column1.setHeaderRenderer(renderer);
column1.setHeaderValue(headerLabel2);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
class JComponentTableCellRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
return (JComponent)value;
}
}
El bit más importante es:
// Here is where the color is changed.
headerLabel1.setBackground(new Color(255, 0, 0));
headerLabel1.setForeground(new Color(0, 0, 255));
// End of color change.
HTH déjame saber cómo lo hiciste :)
Esto está un poco fuera del campo izquierdo, pero podría usar una biblioteca como iText para crear un documento PDF y luego enviarlo a la impresora. Obtendrá un mayor nivel de control sobre la apariencia y la presentación del documento, incluida la capacidad de administrar cómo las filas de la tabla superan los límites de la página, y podrá configurar el encabezado y el pie de página con gran facilidad. .
Puede imprimir un PDF en Java siguiendo estas instrucciones: http://www.juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/
Una solución en la que puedo pensar es usar tu propio imprimible:
public class CustomTablePrintable implements Printable {
Printable tablePrintable;
public void setTablePrintable(Printable printable) {
tablePrintable = printable;
}
public int print(Graphics graphics, PageFormat pageFormat,
int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
tablePrintable.print(graphics, pageFormat, pageIndex);
Graphics2D g2d = (Graphics2D)graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
// Draw header/footer here
graphics.drawString(header, posx, posy);
return PAGE_EXISTS;
}
}
Cuando llame a getPrintable desde su JTable, inyéctelo a una nueva instancia para la impresión personalizada y luego utilícelo con PrinterJob.
Ahora puede dibujar el encabezado y el pie de página como desee, pero también pierde algunas cosas:
- No puede usar MessageFormat para formatear los mensajes. Creo que podría agregar fácilmente esta funcionalidad a su imprimible.
- El encabezado y el pie de página no se posicionan automáticamente. Sin embargo, podría tener estimaciones aproximadas para estos.
EDITAR: He visto las fuentes de Java y existe la clase privada TablePrintable que hace todo el trabajo. Puede obtener un pico en el código fuente para ver cómo se imprimen el encabezado y el pie de página. Luego puede mover esta funcionalidad a su clase imprimible.
Es fácil:
JTable table = new JTable();
((DefaultTableCellRenderer)table.getTableHeader().getColumnModel().getColumn(4).getHeaderRenderer()).setForeground(Color.ORANGE);