使用wkhtmltopdf C库(wkhtmltox)将html字符串转换为pdf

时间:2014-10-26 07:26:16

标签: html c++ c pdf wkhtmltopdf

我正在尝试使用wkhtmltopdf C库将 html string 转换为pdf。我检查了与安装程序一起提供的示例,并成功编译并转换了页面。这是我用来参考的代码。

wkhtmltopdf_global_settings * gs;
wkhtmltopdf_object_settings * os;
wkhtmltopdf_converter * c;

wkhtmltopdf_init(false);

gs = wkhtmltopdf_create_global_settings();

wkhtmltopdf_set_global_setting(gs, "out", "test.pdf");

os = wkhtmltopdf_create_object_settings();

wkhtmltopdf_set_object_setting(os, "page", "https://www.google.com.ph");

c = wkhtmltopdf_create_converter(gs);

wkhtmltopdf_set_progress_changed_callback(c, progress_changed);

wkhtmltopdf_set_phase_changed_callback(c, phase_changed);

wkhtmltopdf_set_error_callback(c, error);

wkhtmltopdf_set_warning_callback(c, warning);

wkhtmltopdf_add_object(c, os, NULL);

if (!wkhtmltopdf_convert(c))
    fprintf(stderr, "Convertion failed!");

printf("httpErrorCode: %d\n", wkhtmltopdf_http_error_code(c));

wkhtmltopdf_destroy_converter(c);

wkhtmltopdf_deinit();

我怀疑更改功能的参数

   wkhtmltopdf_set_object_setting(os, "page", "https://www.google.com.ph");

类似

   wkhtmltopdf_set_object_setting(os, [name of setting], [html string]); 

将完成这项工作,但是文档没有为特定设置指定任何名称,除了样本中包含的名称" page"。

也许我在文档中错过了它,或者这可能不是正确的方法。任何建议都将非常感谢。

4 个答案:

答案 0 :(得分:3)

void wkhtmltopdf_add_object(wkhtmltopdf_converter * converter,
       wkhtmltopdf_object_settings * settings, const char * data)

您可以提供指向 UTF-8编码的 HTML字符串的非空data参数,该字符串将转换为PDF而不是page设置。

答案 1 :(得分:2)

感谢您抽出时间研究这个问题。我最终得到了解决方法。而不是字符串我传递了生成的html文件的本地路径。它不是我正在寻找的解决方案,但它做同样的事情。再次感谢。

答案 2 :(得分:1)

雅罗斯拉夫有正确的想法。

使用wkhtmltopdf_set_object_setting(os,“page”,data)函数,而不是代表网站URL的字符串,在HTML字符串前面加上数据URI。

例如:

const char *pszText = "data:text/html,<!DOCTYPE html><HTML><HEAD> .... </HTML>";

wkhtmltopdf_set_object_setting(os, "page", pszText);

像冠军一样工作。我甚至在div。 x 的页面中嵌入了小图像:在指定数据之前:image / png; base64作为内容网址。

答案 3 :(得分:0)

wkhtmltopdf_add_object(c, os, NULL);

您可以提供要转换的html的实际字符串数据,而不是传递NULL。 在对象设置中,您甚至无法设置“页面”属性。