Re: imprimir multiples paginas con gtk.PrintOperation()



El jue, 31-01-2008 a las 09:38 -0300, Alejandro Valdes Jimenez escribió:
> claro.. ese es un caso en el que conoces exactamente lo que
> necesitaras
> para imprimir las "imagenes", ¿pero que pasa en el caso de texto?..
> por
> ejemplo al imprmir un reporte que se genera mediante el filtro de
> cierta
> información, en este caso no sabes cuantas páginas necesitaras por que
> el resultado es variable, además debes considerar el tamaño de las
> fuentes y todo eso. ¿como se en este caso la cantidad de páginas
> necesarias?

Usando matemáticas. Sea l la cantidad de líneas de texto que quieres
imprimir, h la altura de una linea de texto, y p la altura imprimible de
cada página, entonces 

  n = l*h/p

te da la cantidad de páginas que necesitas.

l, asumo que lo puedes calcular fácilmente a partir del texto que
quieres imprimir. En C lo puedes hacer con:

  p = str;
  l = 0;
  while (*p) 
    if (*p++ == '\n') 
      l++;

h, lo defines tu mismo y luego utilizas esa misma altura para el tamaño
de las fuentes del texto que vas a utilizar. Eso lo puedes hacer en el
callback para el dibujado de cada página usando pango:

  PangoLayout *layout = gtk_print_context_create_pango_layout (context);

  /* Elige una fuente, en este caso "mono" */
  PangoFontDescription *d = pango_font_description_from_string ("mono");

  /* Define el tamaño de la fuente */
  pango_font_description_set_size (d, font_size * PANGO_SCALE);

  /* Define la fuente a usar en el layout del contexto de impresión */
  pango_layout_set_font_description (layout, d);

  /* Se bueno, y libera la descripción de la fuente */
  pango_font_description_free (d);

  /* escribir todo el texto de la página... */
  ...

  /* Dereferencia tu copia del layout */
  g_object_unref (layout);


p, lo puedes obtener con gtk_print_context_get_height ().


¿Fácil, no? :-)

Claudio

-- 
Claudio Saavedra <csaavedra alumnos utalca cl>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]