gtk_webkit_pdf 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -2,9 +2,13 @@ Creating The PDF from HTML using GTK WEBKIT Tool.
2
2
 
3
3
  EXAMPLE:
4
4
 
5
- webkit = GTK::Webkit.new("http://www.gtk.org", "gtk.pdf") #creates the webkit object
6
- webkit.convert_to_pdf #creates the pdf specified in the initialization parameter(in our case gtk.pdf) in current directory
5
+ webkit = GTK::Webkit.new(url) #creates the webkit object
6
+ webkit.convert_to_pdf(path, pdf_name) #creates the pdf specified in the initialization parameter(in our case gtk.pdf) in current directory
7
7
 
8
+ Parameters Description:
9
+ 1 . url => Actual webkit URL. Ex http://www.gtk.org/, http://www.google.com
10
+ 2 . path => System path, where the pdf will be saved. Ex: /home/user/Documents/
11
+ 3 . pdf_name => Actual name to PDF file. Ex: gtk.pdf, google.pdf
8
12
 
9
13
 
10
14
 
@@ -0,0 +1,37 @@
1
+ #include<ruby.h>
2
+ #include <gtk/gtk.h>
3
+ #include <webkit/webkit.h>
4
+ #include<printer.h>
5
+
6
+ VALUE cPrinter = Qnil;
7
+
8
+ static VALUE c_printer_new(VALUE self) {
9
+ printer_wrapper *printer;
10
+ VALUE data_object = Data_Make_Struct(self, printer_wrapper, 0, free_printer, printer);
11
+ gtk_init(NULL, NULL);
12
+ init_printer_configurations(data_object);
13
+ return data_object;
14
+ }
15
+
16
+ static VALUE c_export_to_pdf(VALUE self, VALUE source, VALUE directory_path, VALUE file_name) {
17
+ char *pdf_path;
18
+ WEBKIT_PRINTER_PTR(self, source);
19
+ STR_CON_CAT(directory_path, file_name);
20
+ gtk_print_operation_set_export_filename(printer -> gtk_print_operation, pdf_path);
21
+ printer -> gtk_print_operation_result = webkit_web_frame_print_full(webkit -> webkit_webframe,
22
+ printer -> gtk_print_operation, GTK_PRINT_OPERATION_ACTION_EXPORT, NULL);
23
+
24
+ if(printer -> gtk_print_operation_result == GTK_PRINT_OPERATION_RESULT_APPLY) {
25
+ g_object_unref(printer -> gtk_print_settings);
26
+ printer -> gtk_print_settings = g_object_ref(gtk_print_operation_get_print_settings(printer -> gtk_print_operation));
27
+ printer -> print_status = Qtrue;
28
+ }
29
+ g_object_unref(printer -> gtk_print_operation);
30
+ return printer -> print_status;
31
+ }
32
+
33
+ void init_printer() {
34
+ cPrinter = rb_define_class_under(cGTK, "Printer", rb_cObject);
35
+ rb_define_singleton_method(cPrinter, "new", c_printer_new, 0);
36
+ rb_define_private_method(cPrinter, "export_to_pdf", c_export_to_pdf, 3);
37
+ }
@@ -0,0 +1,4 @@
1
+ #ifndef printer_h__
2
+ #define printer_h__
3
+ #include<printer_utility.h>
4
+ #endif
@@ -0,0 +1,26 @@
1
+ #include <printer_utility.h>
2
+
3
+ void free_printer(void *void_printer) {
4
+ printer_wrapper *printer = void_printer;
5
+ free(printer);
6
+ }
7
+
8
+ void init_printer_configurations(VALUE self) {
9
+ PRINTER_PTR(self);
10
+ printer -> gtk_print_settings = NULL;
11
+ printer -> gtk_print_operation = gtk_print_operation_new();
12
+
13
+ if(printer -> gtk_print_settings != NULL)
14
+ gtk_print_operation_set_print_settings(printer -> gtk_print_operation, printer -> gtk_print_settings);
15
+
16
+ g_signal_connect(printer -> gtk_print_operation, "begin_print", G_CALLBACK(begin_print), NULL);
17
+ g_signal_connect(printer -> gtk_print_operation, "draw_page", G_CALLBACK(draw_page), NULL);
18
+ }
19
+
20
+ void begin_print() {
21
+ //begin print callback
22
+ }
23
+
24
+ void draw_page() {
25
+ //draw page callback
26
+ }
@@ -0,0 +1,32 @@
1
+ #ifndef printer_utility_h__
2
+ #define printer_utility_h__
3
+
4
+ #include <ruby.h>
5
+ #include <gtk/gtk.h>
6
+ #include <webkit/webkit.h>
7
+ #include <stdlib.h>
8
+ #include <utility.h>
9
+
10
+ typedef struct {
11
+ GtkPrintSettings *gtk_print_settings;
12
+ GtkPrintOperation *gtk_print_operation;
13
+ GtkPrintOperationResult gtk_print_operation_result;
14
+ VALUE print_status;
15
+ } printer_wrapper;
16
+
17
+ extern void free_printer(void *void_printer);
18
+ extern void init_printer_configurations(VALUE self);
19
+ extern void begin_print();
20
+ extern void draw_page();
21
+
22
+ extern VALUE cGTK;
23
+
24
+ #define PRINTER_PTR(self) printer_wrapper *printer; \
25
+ Data_Get_Struct(self, printer_wrapper, printer);
26
+
27
+ #define WEBKIT_PRINTER_PTR(printer_self, webkit_self) webkit_wrapper *webkit; \
28
+ printer_wrapper *printer; \
29
+ Data_Get_Struct(webkit_self, webkit_wrapper, webkit); \
30
+ Data_Get_Struct(printer_self, printer_wrapper, printer);
31
+
32
+ #endif
@@ -5,52 +5,37 @@ void free_webkit(void *void_webkit) {
5
5
  free(webkit);
6
6
  }
7
7
 
8
- void initialize_webkit(webkit_wrapper *webkit) {
9
- webkit -> print_status = Qfalse;
10
- webkit -> gtk_print_settings = NULL;
11
- webkit -> webkit_webview = WEBKIT_WEB_VIEW(webkit_web_view_new());
8
+ void mark_webkit_printer(void *void_webkit) {
9
+ webkit_wrapper *webkit = void_webkit;
10
+ if(webkit) {
11
+ rb_gc_mark(webkit -> data_printer);
12
+ rb_gc_mark(webkit -> print_status);
13
+ }
12
14
  }
13
15
 
14
- void activate_webkit(webkit_wrapper *webkit) {
16
+ void activate_gtk_webkit(VALUE self) {
17
+ WEBKIT_PTR(self);
18
+ webkit -> data_printer = Qnil;
19
+ webkit -> webkit_webview = WEBKIT_WEB_VIEW(webkit_web_view_new());
15
20
  webkit_web_view_load_uri(webkit -> webkit_webview, webkit -> webkit_url);
16
- g_signal_connect(webkit -> webkit_webview, "load-finished", G_CALLBACK(webkit_load_finished), webkit);
21
+ g_signal_connect(webkit -> webkit_webview, "load-finished", G_CALLBACK(webkit_load_finished), (void *)self);
17
22
  }
18
23
 
19
- void webkit_load_finished(WebKitWebView *webView, WebKitWebFrame *webkitwebframe, webkit_wrapper *webkit) {
20
- activate_printer(webkit);
21
- gtk_print_operation_set_export_filename(webkit -> gtk_print_operation, webkit -> export_filename);
22
- webkit -> gtk_print_operation_result = webkit_web_frame_print_full(webkit -> webkit_webframe,
23
- webkit -> gtk_print_operation, GTK_PRINT_OPERATION_ACTION_EXPORT, NULL);
24
- actual_print_operation(webkit);
25
- }
26
-
27
- void activate_printer(webkit_wrapper *webkit) {
24
+ void webkit_load_finished(WebKitWebView *webView, WebKitWebFrame *webkitwebframe, void *self) {
25
+ VALUE argv[3];
26
+ WEBKIT_PTR(CAST_TO_VALUE(self));
28
27
  webkit -> webkit_webframe = webkit_web_view_get_main_frame(webkit -> webkit_webview);
29
- set_printer_configurations(webkit);
30
- }
31
-
32
- void set_printer_configurations(webkit_wrapper *webkit) {
33
- webkit -> gtk_print_operation = gtk_print_operation_new();
34
- if(webkit -> gtk_print_settings != NULL)
35
- gtk_print_operation_set_print_settings(webkit -> gtk_print_operation, webkit -> gtk_print_settings);
36
- g_signal_connect(webkit -> gtk_print_operation, "begin_print", G_CALLBACK(begin_print), NULL);
37
- g_signal_connect(webkit -> gtk_print_operation, "draw_page", G_CALLBACK(draw_page), NULL);
38
- }
39
-
40
- void actual_print_operation(webkit_wrapper *webkit) {
41
- if(webkit -> gtk_print_operation_result == GTK_PRINT_OPERATION_RESULT_APPLY) {
42
- g_object_unref(webkit -> gtk_print_settings);
43
- webkit -> gtk_print_settings = g_object_ref(gtk_print_operation_get_print_settings(webkit -> gtk_print_operation));
44
- webkit -> print_status = Qtrue;
45
- }
46
- g_object_unref(webkit -> gtk_print_operation);
28
+
29
+ webkit -> data_printer = rb_funcall(cPrinter, rb_intern("new"), 0);
30
+ argv[0] = CAST_TO_VALUE(self);
31
+ argv[1] = C_TO_RUBY_STR(webkit -> dir_path);
32
+ argv[2] = C_TO_RUBY_STR(webkit -> pdf_filename);
33
+ webkit -> print_status = rb_funcall2(webkit -> data_printer, rb_intern("export_to_pdf"), 3, argv);
47
34
  gtk_main_quit();
48
35
  }
49
36
 
50
- void begin_print() {
51
- //begin print callback
52
- }
53
-
54
- void draw_page() {
55
- //draw page callback
37
+ void set_pdf_configurations(VALUE self, VALUE dir_path, VALUE pdf_filename) {
38
+ WEBKIT_PTR(self);
39
+ webkit -> dir_path = StringValuePtr(dir_path);
40
+ webkit -> pdf_filename = StringValuePtr(pdf_filename);
56
41
  }
@@ -7,24 +7,38 @@
7
7
 
8
8
  typedef struct {
9
9
  WebKitWebView *webkit_webview;
10
- char *export_filename;
11
- char *webkit_url;
12
-
13
10
  WebKitWebFrame *webkit_webframe;
14
- GtkPrintSettings *gtk_print_settings;
15
- GtkPrintOperation *gtk_print_operation;
16
- GtkPrintOperationResult gtk_print_operation_result;
11
+
12
+ char *webkit_url;
13
+ char *dir_path;
14
+ char *pdf_filename;
17
15
  VALUE print_status;
16
+ VALUE data_printer;
18
17
  } webkit_wrapper;
19
18
 
20
- extern void webkit_load_finished(WebKitWebView *webView, WebKitWebFrame *webkitwebframe, webkit_wrapper *webkit);
21
- extern void begin_print();
22
- extern void draw_page();
19
+ extern void webkit_load_finished(WebKitWebView *webView, WebKitWebFrame *webkitwebframe, void *self);
23
20
 
24
- extern void initialize_webkit(webkit_wrapper *webkit);
25
21
  extern void free_webkit(void *void_webkit);
26
- extern void activate_webkit(webkit_wrapper *webkit);
27
- extern void activate_printer(webkit_wrapper *webkit);
28
- extern void set_printer_configurations(webkit_wrapper *webkit);
29
- extern void actual_print_operation(webkit_wrapper *webkit);
22
+ extern void mark_webkit_printer(void *void_webkit);
23
+ extern void activate_gtk_webkit(VALUE self);
24
+ extern void set_pdf_configurations(VALUE self, VALUE dir_path, VALUE pdf_filename);
25
+
26
+ extern void init_printer();
27
+ extern VALUE cPrinter;
28
+
29
+ #define WEBKIT_PTR(self) webkit_wrapper *webkit; \
30
+ Data_Get_Struct(self, webkit_wrapper, webkit);
31
+
32
+ #define C_TO_RUBY_STR(str) rb_str_new2(str)
33
+
34
+ #define RUBY_TO_C_STR(str) StringValuePtr(str)
35
+
36
+ #define CAST_TO_VALUE(value) (VALUE)value
37
+
38
+ #define STR_CON_CAT(dir, name) pdf_path = malloc(strlen(RUBY_TO_C_STR(dir)) + strlen(RUBY_TO_C_STR(name)) + 1); \
39
+ if(pdf_path != NULL) { \
40
+ strcpy(pdf_path, RUBY_TO_C_STR(dir)); \
41
+ strcpy(&pdf_path[strlen(RUBY_TO_C_STR(dir))], RUBY_TO_C_STR(name)); \
42
+ } \
43
+
30
44
  #endif
@@ -6,25 +6,22 @@
6
6
  VALUE cGTK = Qnil;
7
7
  VALUE cWebkit = Qnil;
8
8
 
9
- static VALUE c_new(VALUE self, VALUE webkit_url, VALUE export_filename) {
9
+ static VALUE c_new(VALUE self, VALUE webkit_url) {
10
10
  webkit_wrapper *webkit;
11
- VALUE argv[2];
12
- VALUE data_object = Data_Make_Struct(self, webkit_wrapper, 0, free_webkit, webkit);
11
+ VALUE argv[1];
12
+ VALUE data_object = Data_Make_Struct(self, webkit_wrapper, mark_webkit_printer, free_webkit, webkit);
13
13
  webkit -> webkit_url = StringValuePtr(webkit_url);
14
- webkit -> export_filename = StringValuePtr(export_filename);
15
14
 
16
15
  argv[0] = webkit_url;
17
- argv[1] = export_filename;
18
- rb_obj_call_init(data_object, 2, argv);
16
+ rb_obj_call_init(data_object, 1, argv);
19
17
  return data_object;
20
18
  }
21
19
 
22
- static VALUE c_convert_to_pdf(VALUE self) {
23
- webkit_wrapper *webkit;
20
+ static VALUE c_convert_to_pdf(VALUE self, VALUE dir_path, VALUE pdf_filename) {
21
+ WEBKIT_PTR(self);
24
22
  gtk_init(NULL, NULL);
25
- Data_Get_Struct(self, webkit_wrapper, webkit);
26
- initialize_webkit(webkit);
27
- activate_webkit(webkit);
23
+ set_pdf_configurations(self, dir_path, pdf_filename);
24
+ activate_gtk_webkit(self);
28
25
  gtk_main();
29
26
  return webkit -> print_status;
30
27
  }
@@ -32,6 +29,8 @@ static VALUE c_convert_to_pdf(VALUE self) {
32
29
  void Init_webkit(void) {
33
30
  cGTK = rb_define_module("GTK");
34
31
  cWebkit = rb_define_class_under(cGTK, "Webkit", rb_cObject);
35
- rb_define_singleton_method(cWebkit, "new", c_new, 2);
36
- rb_define_method(cWebkit, "convert_to_pdf", c_convert_to_pdf, 0);
32
+ rb_define_singleton_method(cWebkit, "new", c_new, 1);
33
+ rb_define_method(cWebkit, "convert_to_pdf", c_convert_to_pdf, 2);
34
+
35
+ init_printer();
37
36
  }
@@ -1,4 +1,5 @@
1
1
  #ifndef webkit_h__
2
- #define webkit_h__
3
- #include <utility.h>
2
+ #define webkit_h__
3
+ #include <utility.h>
4
+
4
5
  #endif
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'gtk_webkit_pdf'
3
- s.version = '0.0.0'
4
- s.date = '2013-01-03'
3
+ s.version = '0.0.1'
4
+ s.date = '2013-01-04'
5
5
  s.summary = "GTK WEBKIT"
6
6
  s.description = "Generates the PDF from the HTML using GTK WEBKIT"
7
7
  s.authors = ["Mohanraj Ramanujam"]
@@ -1,10 +1,9 @@
1
1
  module GTK
2
2
  class Webkit
3
- attr_accessor :webkit_url, :export_filename
3
+ attr_accessor :webkit_url
4
4
 
5
- def initialize(webkit_url, export_filename)
5
+ def initialize(webkit_url)
6
6
  @webkit_url = webkit_url
7
- @export_filename = export_filename
8
7
  end
9
8
  end
10
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gtk_webkit_pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-03 00:00:00.000000000 Z
12
+ date: 2013-01-04 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Generates the PDF from the HTML using GTK WEBKIT
15
15
  email: mohanraj.ramanujam@gmail.com
@@ -21,8 +21,12 @@ files:
21
21
  - lib/gtk_webkit_pdf/gtk_webkit_pdf.rb
22
22
  - ext/gtk_webkit_pdf/utility.c
23
23
  - ext/gtk_webkit_pdf/webkit.c
24
+ - ext/gtk_webkit_pdf/printer_utility.c
25
+ - ext/gtk_webkit_pdf/printer.c
26
+ - ext/gtk_webkit_pdf/printer.h
24
27
  - ext/gtk_webkit_pdf/utility.h
25
28
  - ext/gtk_webkit_pdf/webkit.h
29
+ - ext/gtk_webkit_pdf/printer_utility.h
26
30
  - README
27
31
  - gtk_webkit_pdf.gemspec
28
32
  - ext/gtk_webkit_pdf/extconf.rb