Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <gtk/gtk.h>
  3. #include <gtk/gtkunixprint.h>
  4. #include <webkit2/webkit2.h>
  5.  
  6.  
  7. void gtk_wait() {
  8.   while (gtk_events_pending()) {
  9.         gtk_main_iteration_do(true);
  10.     }
  11. }
  12.  
  13. gboolean find_file_printer(GtkPrinter* printer, char** data) {
  14.   printf("check_printer\n");
  15.     if (!g_strcmp0(G_OBJECT_TYPE_NAME(gtk_printer_get_backend(printer)), "GtkPrintBackendFile")) {
  16.         *data = g_strdup(gtk_printer_get_name(printer));
  17.         return TRUE;
  18.     }
  19.     return FALSE;
  20. }
  21.  
  22. void printFinished(WebKitPrintOperation* op, gpointer data) {
  23.   printf("finished\n");
  24. }
  25. void printFailed(WebKitPrintOperation* op, gpointer error, gpointer data) {
  26.   printf("failed\n");
  27. }
  28.  
  29. int main(int argc, char** argv) {
  30.   printf("gtk_init\n");
  31.   gtk_init(0, NULL);
  32.   printf("new_window\n");
  33.   GtkWidget* window = gtk_offscreen_window_new();
  34.   gtk_window_set_default_size(GTK_WINDOW(window), 1024, 768);
  35.  
  36.   printf("create_webview\n");
  37.   WebKitWebView* webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
  38.   gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(webView));
  39.  
  40.   printf("load_uri\n");
  41.   webkit_web_view_load_uri(webView, "http://http.rip/");
  42.  
  43.   // Make sure that when the browser area becomes visible, it will get mouse
  44.   // and keyboard events
  45.   printf("get_focus\n");
  46.   gtk_widget_grab_focus(GTK_WIDGET(webView));
  47.  
  48.   // Make sure the main window and all its contents are visible
  49.   printf("show\n");
  50.   gtk_widget_show_all(window);
  51.  
  52.   printf("wait\n");
  53.   // Run the main GTK+ event loop
  54.   gtk_wait();
  55.  
  56.   printf("page_setup\n");
  57.   WebKitPrintOperation* op = webkit_print_operation_new(webView);
  58.   GtkPageSetup* setup = gtk_page_setup_new();
  59.   GtkPaperSize* paperSize = gtk_paper_size_new(gtk_paper_size_get_default());
  60.     gtk_page_setup_set_paper_size_and_default_margins(setup, paperSize);
  61.   gtk_page_setup_set_left_margin(setup, 0, GTK_UNIT_POINTS);
  62.   gtk_page_setup_set_right_margin(setup, 0, GTK_UNIT_POINTS);
  63.   gtk_page_setup_set_top_margin(setup, 0, GTK_UNIT_POINTS);
  64.   gtk_page_setup_set_bottom_margin(setup, 0, GTK_UNIT_POINTS);
  65.     webkit_print_operation_set_page_setup(op, setup);
  66.  
  67.     // settings
  68.   printf("settings\n");
  69.     GtkPrintSettings* settings = gtk_print_settings_new();
  70.     gtk_print_settings_set_orientation(settings, GTK_PAGE_ORIENTATION_PORTRAIT);
  71.     gtk_print_settings_set_quality(settings, GTK_PRINT_QUALITY_HIGH);
  72.  
  73.   printf("printer\n");
  74.     char* printer = NULL;
  75.     gtk_enumerate_printers((GtkPrinterFunc)find_file_printer, &printer, NULL, TRUE);
  76.   printf("found_printer %s\n", printer);
  77.     gtk_print_settings_set_printer(settings, printer);
  78.     //delete printer;
  79.   printf("set_output\n");
  80.     // gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BASENAME, "gtk-demo");
  81.   // gtk_print_settings_set(settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "PDF");
  82.     // webkit_print_operation_set_print_settings(op, settings);
  83.  
  84.     // print
  85.     g_signal_connect(op, "failed", G_CALLBACK(printFailed), NULL);
  86.     g_signal_connect(op, "finished", G_CALLBACK(printFinished), NULL);
  87.   printf("do_print\n");
  88.     webkit_print_operation_print(op);
  89.   printf("cleanup\n");
  90.   gtk_wait();
  91.     g_object_unref(op);
  92.     g_object_unref(settings);
  93.  
  94.   return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement