diff options
Diffstat (limited to 'v_windows/v/old/examples/c_interop_wkhtmltopdf.v')
-rw-r--r-- | v_windows/v/old/examples/c_interop_wkhtmltopdf.v | 96 |
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') +} |