Re: gnomeprint =?ISO-8859-1?Q?orientaci=F3n?= horizontal
- From: Claudio Saavedra <csaavedra alumnos utalca cl>
- To: avaldes utalca cl
- Cc: "Advocacy, chit-chat and event planning in Chile" <gnome-cl-list gnome org>
- Subject: Re: gnomeprint orientación horizontal
- Date: Thu, 18 Jan 2007 02:00:31 -0300
On Wed, 2007-01-17 at 18:24 -0300, Alejandro Valdes Jimenez wrote:
>
> tienes algun ejemplo por ahi?
Para texto, gtk-demo tiene un ejemplo de un programa que se imprime a si
mismo. Para im�nes, revisa este programita hecho en cairo. Es m�de
lo que necesitar� con GtkPrint, pero te da la idea. El archivo
shell/eog-window.c del EOG es un ejemplo m�completo.
Claudio
--
Claudio Saavedra <csaavedra alumnos utalca cl>
/** Author: Claudio Saavedra <csaavedra alumnos utalca cl>
Public domain.
**/
#include <cairo.h>
#include <cairo-pdf.h>
#include <glib.h>
#include <gdk/gdk.h>
int
main (int argc, char **argv)
{
GdkPixbuf *pixbuf;
gint width, height;
gdouble p_width, p_height;
gdouble scale_factor;
GError *error = NULL;
cairo_surface_t *surface;
cairo_t *cr;
cairo_pattern_t *pattern;
if (argc < 2)
return 1;
g_type_init ();
pixbuf = gdk_pixbuf_new_from_file (argv[1], &error);
if (error != NULL) {
g_warning ("Couldn't load image: %s", error->message);
g_error_free (error);
return 1;
}
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
p_width = 72 * 8.50;
p_height = 72 * 11.0;
/* create a PDF surface of letter page size */
surface = cairo_pdf_surface_create ("output.pdf", p_width, p_height);
cr = cairo_create (surface);
if (p_width > width && p_height > height) {
cairo_translate (cr, (p_width - width)/2,
(p_height - height)/2);
} else if (width > height && width > p_width) {
scale_factor = ((gdouble)p_width)/width;
cairo_scale (cr, scale_factor, scale_factor);
cairo_translate (cr, 0, (p_height/scale_factor - height)/2);
} else {
scale_factor = ((gdouble)p_height)/height;
cairo_scale (cr, scale_factor, scale_factor);
cairo_translate (cr, (p_width/scale_factor - width)/2, 0);
}
/* this is a workaround for a bug in cairo's PDF backend */
cairo_rectangle (cr, 0, 0, width, height);
cairo_clip (cr);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
cairo_show_page (cr);
cairo_surface_finish (surface);
g_object_unref (G_OBJECT (pixbuf));
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]