aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/examples/c_interop_wkhtmltopdf.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/old/examples/c_interop_wkhtmltopdf.v')
-rw-r--r--v_windows/v/old/examples/c_interop_wkhtmltopdf.v96
1 files changed, 96 insertions, 0 deletions
diff --git a/v_windows/v/old/examples/c_interop_wkhtmltopdf.v b/v_windows/v/old/examples/c_interop_wkhtmltopdf.v
new file mode 100644
index 0000000..ddd56b5
--- /dev/null
+++ b/v_windows/v/old/examples/c_interop_wkhtmltopdf.v
@@ -0,0 +1,96 @@
+import os
+
+// Example of C interop for a very handy task.
+//
+// wkhtmltopdf and wkhtmltoimage are open source (LGPLv3) command line tools to
+// render HTML into PDF and various image formats using the Qt WebKit rendering
+// engine. These run entirely "headless" and do not require a display or display
+// service.
+//
+// https://github.com/wkhtmltopdf/wkhtmltopdf
+// https://wkhtmltopdf.org/downloads.html
+// https://wkhtmltopdf.org/libwkhtmltox/
+#flag -lwkhtmltox
+#include "wkhtmltox/pdf.h" # You can install the C package for your system from the wkhtmltopdf.org/downloads.html page
+
+struct C.wkhtmltopdf_global_settings {}
+
+struct C.wkhtmltopdf_object_settings {}
+
+struct C.wkhtmltopdf_converter {}
+
+fn C.wkhtmltopdf_init(use_graphics bool) int
+
+fn C.wkhtmltopdf_deinit() int
+
+fn C.wkhtmltopdf_version() &char
+
+fn C.wkhtmltopdf_create_global_settings() &C.wkhtmltopdf_global_settings
+
+fn C.wkhtmltopdf_destroy_global_settings(global_settings &C.wkhtmltopdf_global_settings)
+
+fn wkhtmltopdf_set_global_setting(global_settings &C.wkhtmltopdf_global_settings, name &char, value &char) bool
+
+fn C.wkhtmltopdf_create_object_settings() &C.wkhtmltopdf_object_settings
+
+fn C.wkhtmltopdf_destroy_object_settings(object_settings &C.wkhtmltopdf_object_settings)
+
+fn C.wkhtmltopdf_set_object_setting(object_settings &C.wkhtmltopdf_object_settings, name &char, value &char) bool
+
+fn C.wkhtmltopdf_create_converter(global_settings &C.wkhtmltopdf_global_settings) &C.wkhtmltopdf_converter
+
+fn C.wkhtmltopdf_destroy_converter(converter &C.wkhtmltopdf_converter)
+
+fn C.wkhtmltopdf_add_object(converter &C.wkhtmltopdf_converter, object_settings &C.wkhtmltopdf_object_settings, data &char)
+
+fn C.wkhtmltopdf_convert(converter &C.wkhtmltopdf_converter) bool
+
+fn C.wkhtmltopdf_http_error_code(converter &C.wkhtmltopdf_converter) int
+
+fn C.wkhtmltopdf_get_output(converter &C.wkhtmltopdf_converter, data &&char) int
+
+fn main() {
+ // init
+ init := C.wkhtmltopdf_init(0)
+ println('wkhtmltopdf_init: $init')
+ version := unsafe { cstring_to_vstring(&char(C.wkhtmltopdf_version())) }
+ println('wkhtmltopdf_version: $version')
+ global_settings := C.wkhtmltopdf_create_global_settings()
+ println('wkhtmltopdf_create_global_settings: ${voidptr(global_settings)}')
+ object_settings := C.wkhtmltopdf_create_object_settings()
+ println('wkhtmltopdf_create_object_settings')
+ converter := C.wkhtmltopdf_create_converter(global_settings)
+ println('wkhtmltopdf_create_converter: ${voidptr(converter)}')
+ // convert
+ mut result := C.wkhtmltopdf_set_object_setting(object_settings, c'page', c'http://www.google.com.br')
+ println('wkhtmltopdf_set_object_setting: $result [page = http://www.google.com.br]')
+ C.wkhtmltopdf_add_object(converter, object_settings, 0)
+ println('wkhtmltopdf_add_object')
+ result = C.wkhtmltopdf_convert(converter)
+ println('wkhtmltopdf_convert: $result')
+ error_code := C.wkhtmltopdf_http_error_code(converter)
+ println('wkhtmltopdf_http_error_code: $error_code')
+ if result {
+ pdata := &char(0)
+ ppdata := &pdata
+ size := C.wkhtmltopdf_get_output(converter, voidptr(ppdata))
+ println('wkhtmltopdf_get_output: $size bytes')
+ mut file := os.open_file('./google.pdf', 'w+', 0o666) or {
+ println('ERR: $err')
+ return
+ }
+ wrote := unsafe { file.write_ptr(pdata, size) }
+ println('write_bytes: $wrote [./google.pdf]')
+ file.flush()
+ file.close()
+ }
+ // destroy
+ C.wkhtmltopdf_destroy_converter(converter)
+ println('wkhtmltopdf_destroy_converter')
+ C.wkhtmltopdf_destroy_object_settings(object_settings)
+ println('wkhtmltopdf_destroy_object_settings: ${voidptr(object_settings)}')
+ C.wkhtmltopdf_destroy_global_settings(global_settings)
+ println('wkhtmltopdf_destroy_global_settings')
+ deinit := C.wkhtmltopdf_deinit()
+ println('wkhtmltopdf_deinit: $deinit')
+}