gtk+ Печать изображения
В этом посте хоелось бы рассказать как с помощью gtk+ printing api можно распечатать какое-либо изображение. Для работы с средствами печати в gtk+-2.0 существует достаточно удобное api, называемое gtk+ printing api. Далее мы рассмотрим как с помощью данного api отправить на печать изображение.
Для начала создадим функцию непосредственно вызова диалога печати, назовем ее print_pixbuf:
void print_pixbuf(GtkWidget* widget, MainWin* mw)
{
GtkPrintOperation *op;
GtkPrintOperationResult res;
GtkPrintSettings *settings;
op = gtk_print_operation_new ();
gtk_print_operation_set_n_pages (op, 1);
gtk_print_operation_set_unit (op, GTK_UNIT_MM);
g_signal_connect (op, "draw_page", G_CALLBACK (draw_page), mw);
res = gtk_print_operation_run (op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, mw, NULL);
}
В этой функции у нас присутствует один параметр, в данном случае это указатель на структуру MainWin, которая представляет из себя главное окно нашего приложения.
Далее как видно у нас в функции вызова диалога печати есть сигнал draw_page повешенный, на одноименную функцию.
Теперь сама функция draw_page:
static void draw_page (GtkPrintOperation * oper, GtkPrintContext * context, gint nr, gpointer user_data)
{
MainWin* mw = (MainWin*)user_data;
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file("image path",NULL);
pixbuf = gdk_pixbuf_scale_simple (pixbuf,197, 210, GDK_INTERP_HYPER);
cairo_t *cr = gtk_print_context_get_cairo_context (context);
cairo_surface_t *image;
gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
cairo_paint (cr);
cairo_surface_destroy (image);
g_object_unref (pixbuf);
}
Вот в принципе и все.
Передав в функцию draw_page путь нужного изображения в image path можно вызывать, функцию print_pixbuf в том месте где понадобится распечатывать изображение, откроется диалоговое окно печати:
Можно печатать
Если у вас появились вопросы или пожелания оставляйте в комментариях.


