Experiment for wkhtmltopdf
brew install wkhtmltopdf
crystal wkhtmltopdf.cr
known issue: althout conversion succeeds the wkhtmltopdf process seems to hanging in the very end :-(
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Foo</title> | |
</head> | |
<body> | |
<h1>Title</h1> | |
<p> paragraph</p> | |
<h2>Subtitle2</h2> | |
<p>other paragraph</p> | |
</body> | |
</html> |
@[Link("wkhtmltox")] | |
lib Wkhtmltox | |
type Wkhtmltopdf_global_settings = Void* | |
type Wkhtmltopdf_converter = Void* | |
type Wkhtmltopdf_object_settings = Void* | |
alias Wkhtmltopdf_int_callback = Wkhtmltopdf_converter, Int32* -> Void | |
fun wkhtmltopdf_init(use_graphics : Int32) : Int32 | |
fun wkhtmltopdf_deinit() : Int32 | |
fun wkhtmltopdf_create_global_settings() : Wkhtmltopdf_global_settings | |
fun wkhtmltopdf_set_global_setting(settings : Wkhtmltopdf_global_settings, name : UInt8*, value : UInt8*) : Int32 | |
fun wkhtmltopdf_create_object_settings() : Wkhtmltopdf_object_settings | |
fun wkhtmltopdf_set_object_setting(settings : Wkhtmltopdf_object_settings, name : UInt8*, value : UInt8*) : Int32 | |
fun wkhtmltopdf_create_converter(settings : Wkhtmltopdf_global_settings) : Wkhtmltopdf_converter | |
fun wkhtmltopdf_add_object(converter : Wkhtmltopdf_converter, setting : Wkhtmltopdf_object_settings, data : UInt8*) | |
fun wkhtmltopdf_convert(converter : Wkhtmltopdf_converter) : Int32 | |
fun wkhtmltopdf_set_progress_changed_callback(converter : Wkhtmltopdf_converter, cb : Wkhtmltopdf_int_callback); | |
fun wkhtmltopdf_set_finished_callback(converter : Wkhtmltopdf_converter, cb : Wkhtmltopdf_int_callback); | |
fun wkhtmltopdf_destroy_converter(converter : Wkhtmltopdf_converter) | |
end | |
Wkhtmltox.wkhtmltopdf_init(0) | |
gs = Wkhtmltox.wkhtmltopdf_create_global_settings | |
os = Wkhtmltox.wkhtmltopdf_create_object_settings() | |
Wkhtmltox.wkhtmltopdf_set_object_setting(os, "page", "file://#{__DIR__}/test.html") | |
Wkhtmltox.wkhtmltopdf_set_global_setting(gs, "out", "test.pdf") | |
c = Wkhtmltox.wkhtmltopdf_create_converter(gs) | |
Wkhtmltox.wkhtmltopdf_set_progress_changed_callback(c, -> (converter, code) { | |
puts "progress #{code}" | |
}) | |
Wkhtmltox.wkhtmltopdf_set_finished_callback(c, -> (converter, code) { | |
puts "finished" | |
}) | |
Wkhtmltox.wkhtmltopdf_add_object(c, os, nil); | |
puts Wkhtmltox.wkhtmltopdf_convert(c) | |
Wkhtmltox.wkhtmltopdf_destroy_converter(c) | |
Wkhtmltox.wkhtmltopdf_deinit() | |
puts "ok" |