1 module wkhtmltox.image; 2 3 import core.stdc.string; 4 5 import std.string; 6 7 import wkhtmltox.dll; 8 9 10 void init(bool graphics = false) { 11 wkhtmltox.dll.init(); 12 13 wkhtmltox.dll.wkhtmltoimage_init(graphics ? 1 : 0); 14 } 15 16 17 const(char)[] ver() { 18 return fromStringz(wkhtmltoimage_version()); 19 } 20 21 22 const(char)* verz() { 23 return wkhtmltoimage_version(); 24 } 25 26 27 static struct Converter { 28 @disable this(this); 29 30 private this(wkhtmltoimage_converter* cvt) { 31 cvt_ = cvt; 32 } 33 34 ~this() { 35 if (cvt_) { 36 wkhtmltoimage_destroy_converter(cvt_); 37 cvt_ = null; 38 } 39 } 40 41 void convert() { 42 wkhtmltoimage_convert(cvt_); 43 } 44 45 const(ubyte)[] data() { 46 const(ubyte)* data; 47 auto len = wkhtmltoimage_get_output(cvt_, &data); 48 49 return data[0..len]; 50 } 51 52 private: 53 wkhtmltoimage_converter* cvt_ = null; 54 } 55 56 57 auto createConverter(string source, string[string] settings = null) { 58 auto gs = wkhtmltoimage_create_global_settings(); 59 wkhtmltoimage_set_global_setting(gs, "in\0".ptr, source.toStringz); 60 wkhtmltoimage_set_global_setting(gs, "fmt\0".ptr, "png\0".ptr); 61 62 foreach (k, v; settings) 63 wkhtmltoimage_set_global_setting(gs, k.toStringz, v.toStringz); 64 65 auto cvt = wkhtmltoimage_create_converter(gs, null); 66 67 return Converter(cvt); 68 } 69 70 71 shared static ~this() { 72 if (wkhtmltox.dll.loaded()) 73 wkhtmltoimage_deinit(); 74 }