Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/09/2013, 10:02
naggety
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Calcular ancho de linea máximo para PrinterJob

Hola.

Estoy desarrollando un programa con el que tengo que imprimir unos albaranes. Es la primera vez que me toca usar impresoras, pero ya he conseguido mandar imprimir mostrando el diálogo del sistema, así como imprimir distintas páginas (cosa que necesitaba obligatoriamente)

No obstante, no he encontrado el cómo calcular el ancho que va a ocupar un texto (uso Graphics.putString), por lo que no sé cómo conseguir cortarlo por el lugar adecuado y que salte a la siguiente linea. Para esto no descarto usar una fuente monospace, si es que se puede saber el ancho de los caracteres.

También tengo que calcular que salte de página si el contenido tiene demasiada altura, pero he visto cómo conseguirlo con el alto de linea.

Pego el código de la prueba que he hecho hasta ahora para que veáis como lo he ido haciendo:

Código Java:
Ver original
  1. import java.awt.Graphics;
  2. import java.awt.print.PageFormat;
  3. import java.awt.print.Pageable;
  4. import java.awt.print.Printable;
  5. import java.awt.print.PrinterException;
  6. import java.awt.print.PrinterJob;
  7.  
  8. public class Impresion implements Printable, Pageable {
  9.    
  10.     static int NUMPAGES = 2;
  11.     protected PrinterJob pj;
  12.    
  13.     public Impresion () {
  14.         pj = PrinterJob.getPrinterJob();
  15.         pj.setPageable( this );
  16.         if ( pj.printDialog() ) {
  17.             try {
  18.                 pj.print();
  19.             } catch (PrinterException e) {
  20.                 e.printStackTrace();
  21.             }
  22.         }
  23.     }
  24.  
  25.     @Override
  26.     public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
  27.         if ( pageIndex >= NUMPAGES ) {
  28.             return NO_SUCH_PAGE;
  29.         }
  30.         else {
  31.             graphics.translate( (int)pageFormat.getImageableX(), (int)pageFormat.getImageableY() );
  32.             graphics.drawString("Hello World: page "+Integer.toString(pageIndex), 100, 100 );
  33.             return PAGE_EXISTS;
  34.         }
  35.     }
  36.  
  37.     @Override
  38.     public int getNumberOfPages() {
  39.         return NUMPAGES;
  40.     }
  41.  
  42.     @Override
  43.     public PageFormat getPageFormat(int arg0) throws IndexOutOfBoundsException {
  44.         return pj.defaultPage();
  45.     }
  46.  
  47.     @Override
  48.     public Printable getPrintable(int arg0) throws IndexOutOfBoundsException {
  49.         return this;
  50.     }
  51. }