利用wkhtmltopdf(thead)将网页导出为pdf方法;以及存在表格图片被分页打断的问题解决方法

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_object_settings * os;
    wkhtmltopdf_converter * c;

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

    /*
    * Create a global settings object used to store options that are not
    * related to input objects, note that control of this object 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 object settings object that is used to store settings
    * related to a input object, note again that control of this object is parsed to
    * the converter later, which is then responsible for freeing it
    */
    os = wkhtmltopdf_create_object_settings();
    /* We want to convert to convert the qstring documentation page */
    myassert(wkhtmltopdf_set_object_setting(os, "page", html_path.toUtf8().data()));
    myassert(wkhtmltopdf_set_object_setting(os, "toc.indentation", "2em"));
    myassert(wkhtmltopdf_set_object_setting(os, "useExternalLinks", "true"));
    myassert(wkhtmltopdf_set_object_setting(os, "web.loadImages", "true"));

    myassert(wkhtmltopdf_set_object_setting(os, "web.background", "true"));
    myassert(wkhtmltopdf_set_object_setting(os, "web.defaultEncoding", "utf-8"));

    /* Create the actual converter object 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 object describing the qstring documentation page
    * to the list of pages to convert. Objects are converted in the order in which
    * they are added
    */
    wkhtmltopdf_add_object(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 object 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>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>激光扫描安全距离检测报告</title>
	<style>
 	table, tr, td, th, tbody, thead, tfoot {page-break-inside: avoid !important;}
	</style>
 </head>
 <body>
 </body>
</html>

猜你喜欢

转载自blog.csdn.net/m0_37251750/article/details/85050316
今日推荐