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>