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 }