1、将html文件转为pdf文件的函数:

html_path-----html路径;pdf_path-----pdf路径

 bool HtmlToPdf(QString html_path, QString pdf_path)
 {
    QFile::remove(pdf_path);
    int result = 0;
    wkhtmltopdf_global_settings * gs;
    wkhtmltopdf_ _settings * os;
    wkhtmltopdf_converter * c;

    /* Init wkhtmltopdf in graphics less mode */
    wkhtmltopdf_init(false);

    /*
    * Create a global settings   used to store options that are not
    * related to input  s, note that control of this   is parsed to
    * the converter later, which is then responsible for freeing it
    */
    gs = wkhtmltopdf_create_global_settings();
    myassert(wkhtmltopdf_set_global_setting(gs, \"collate\", \"true\"));
    myassert(wkhtmltopdf_set_global_setting(gs, \"outline\", \"true\"));
    myassert(wkhtmltopdf_set_global_setting(gs, \"margin.top\", \"2cm\"));
   


    myassert(wkhtmltopdf_set_global_setting(gs, \"out\", pdf_path.toUtf8().data()));
    myassert( wkhtmltopdf_set_global_setting(gs, \"load.cookieJar\", \"myjar.jar\"));
    /*
    * Create a input   settings   that is used to store settings
    * related to a input  , note again that control of this   is parsed to
    * the converter later, which is then responsible for freeing it
    */
    os = wkhtmltopdf_create_ _settings();
    /* We want to convert to convert the qstring documentation page */
    myassert(wkhtmltopdf_set_ _setting(os, \"page\", html_path.toUtf8().data()));
    myassert(wkhtmltopdf_set_ _setting(os, \"toc.indentation\", \"2em\"));
    myassert(wkhtmltopdf_set_ _setting(os, \"useExternal s\", \"true\"));
    myassert(wkhtmltopdf_set_ _setting(os, \"web.loadImages\", \"true\"));

    myassert(wkhtmltopdf_set_ _setting(os, \"web.background\", \"true\"));
    myassert(wkhtmltopdf_set_ _setting(os, \"web.defaultEncoding\", \"utf-8\"));

    /* Create the actual converter   used to convert the pages */
    c = wkhtmltopdf_create_converter(gs);

    /* Call the progress_changed function when progress changes */
    wkhtmltopdf_set_progress_changed_callback(c, progress_changed);

    /* Call the phase _changed function when the phase changes */
    wkhtmltopdf_set_phase_changed_callback(c, phase_changed);

    /* Call the error function when an error occurs */
    wkhtmltopdf_set_error_callback(c, error);

    /* Call the warning function when a warning is issued */
    wkhtmltopdf_set_warning_callback(c, warning);

    /*
    * Add the the settings   describing the qstring documentation page
    * to the list of pages to convert.  s are converted in the order in which
    * they are added
    */
    wkhtmltopdf_add_ (c, os, NULL);
    
    /* Perform the actual conversion */
    myassert(wkhtmltopdf_convert(c));

    /* Output possible http error code encountered */
    errcode = wkhtmltopdf_http_error_code(c);
    printf(\"httpErrorCode: %d\\n\", errcode);
    //QMessageBox::critical(nullptr, QString::number(errcode),
    //    QString(\"httpErrorCode: %1\").arg(QString::number(errcode)));

    /* Destroy the converter   since we are done with it */
    wkhtmltopdf_destroy_converter(c);

    /* We will no longer be needing wkhtmltopdf funcionality */
    myassert(wkhtmltopdf_deinit());

	return true;
}

2、下图是html转dpf时出现的问题

\"在这里插入图片描述\"
这是修复好的pdf
\"在这里插入图片描述\"

3、解决方案

在对应的html文件里面添加如下:
table, tr, td, th, tbody, thead, tfoot {page-break-inside: avoid !important;}即可解决

<html>
 <head>
	<  http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
	< >激光扫描安全距离检测报告</ >
	<style>
 	table, tr, td, th, tbody, thead, tfoot {page-break-inside: avoid !important;}
	</style>
 </head>
 <body>
 </body>
</html>
收藏 打印