Skip to content

Instantly share code, notes, and snippets.

@bcardiff
Last active November 21, 2017 16:39
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bcardiff/bd938e70fc32176fa74a to your computer and use it in GitHub Desktop.
Save bcardiff/bd938e70fc32176fa74a to your computer and use it in GitHub Desktop.
wkhtmltopdf binding for crystal

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"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment