QT中使用HTML格式原因

在开发时需要将放入的图片导出的PDF,而一般的方式只能将文字保存,保存不了图片格式的内容。HTML格式广泛运用于数据的存储、使用以及格式转换中,这里使用HTML是为了将QTextEdit中的富文本导出大PDF。通过QTextEdit中的toHtml()函数获取QTextEdit中的内容,如:ui->textEdit->toHtml().toUtf8()。获取的内容格式是HTML格式,通过html可以转换成PDF格式。

如何使用HTML导出PDF文件

  1. 使用QPrinter类定义对象,然后通过setOutputFormat定义转成的是PDF格式的文件,setOutputFileName定义转成PDF文件的文件名。
  2. 使用QTextDocument类定义对象,通过setHtml、print函数将html转换成PDF
    QString pdfname = "E:/htmltopdf.pdf";
    QPrinter printer;
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(pdfname);
    QTextDocument document;
    document.setHtml(html);		//注:html是QTextEdit控件中获取的html格式内容
    document.print(&printer);
    document.end();

HTML中的语法

主要的几个语法点:

  1. html是以 <html>开头,</html> 结尾。每组信息都是成对出现的
  2. <title> 中的内容不显示在PDF中,只有当鼠标在PDF文档上点击标题时才会显示<title>后面的内容
  3. h1~h6第不同的标题格式,主要是字体大小不同。hr是绘制一条横线
  4. 在开始是需要设置PDF格式颜色,好像不设置会导致不显示内容的情况
  5. 创建表格用table属性,绘制table表格时 border表示线宽,cellspacing表示单元格之间的空隙,如果不设置默认为1,就会用一只1px宽的笔绘制table边框,有点难看,所以建议设置cellspacing为0
  6. html中可以使用占位符,但是要注意添加\"。
void Widget::on_pushButton_clicked() QString textEdit_html = ui->textEdit->toHtml().toUtf8(); QString textEdit_m = ui->textEdit->toPlainText(); //html添加标题 QString html = ""; html += "<html>"; html += "<head>"; html += "<title> 这是PDF不显示内容直到鼠标靠近 </title>"; //title属性内容不显示,当鼠标放到上面时显示title中的内容 html += "<head>"; //head 中的内容不显示 html += "<body bgcolor=\"#ffffff\">"; //PDF背景颜色需要设置,否则不能显示后面的字体内容 html += "<h1 style=\" text-align:center\"> 测试HTML转成PDF文档</h1>"; //h1~h6 字体是限定的 html += "<h1 style=\" text-align:center\"> 第二行标题</h1>"; html += "<p style=\" text-align:right\"> 序号 </h1>"; html += "<table border=\"0.2\" cellpadding=\" 3 \" cellspacing=\" 0 \" margin=\"auto\" >"; // cellspacing 单元格之间的空间,cellpadding 属性规定单元边沿与其内容之间的空白 html += "<tr >"; //html += "<td width=\"20%\" hight= \"20px\">调试任务</th>"; QString str1 = QString(" %1 ").arg("调试任务"); //html += "<td style= \" width=20%; height:30px;line-height:24px;color:#E74C3C \">" + str1 + "</th>"; //line-height行高,color字体颜色 html += "<td width=\"20%\" style= \"color:#E74C3C; text-align:center \" >" + str1 + "</th>"; html += "<td width=\"80%\"> </th>"; html += "</tr>"; html += "<tr>"; html += "<td width=\"20%\" hight= \"20px\">治疗室序号</td>"; html += "<td width=\"40%\"> </td>"; QString str3 = QString(" %1 ").arg("日期日期"); html += "<td width=\"20%\">" + str3 + "</td>"; html += "<td width=\"40%\"> </td>"; html += "</tr>"; html += "</table>"; html += "<table border=\" 0.2 \" cellspacing=\" 0 \" >"; html += "<tr>"; html += "<th width=\"20%\" hight= \"20px\">治疗室序号</th>"; html += "<th width=\"40%\"> </th>"; QString str2 = QString(" %1 ").arg("日期"); html += "<th width=\"20%\">" + str2 + "</th>"; html += "<th width=\"40%\"> </th>"; html += "</tr>"; html += "</table>"; html += "<table border=\" 0.2 \" cellspacing=\" 0 \" >"; html += "<tr>"; html += "<td width=\"100%\">" +textEdit_html + "</th>"; html += "</tr>"; html += "</table>"; html += "</html>"; qDebug()<< textEdit_html << endl; qDebug()<< html << endl; qDebug()<< textEdit_m << endl; QString pdfname = "E:/testhtmlpdf.pdf"; QPrinter printer; printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName(pdfname); QTextDocument document; //QString html = saveHtmlToPDFgld(); //document.setHtml(html); document.setHtml(html); document.print(&printer); document.end(); 一、生成pdf(来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101gvnx.htmlQt如何让图片、文本、HTML或者其他形式的内容生成pdf呢?主要利用QPrinter来实现,QPrinter不止可以操作打印机来打印纸张文件,并且可以将文件保存至磁盘,存储为pdf格式文件。 1、使用图片生成pdf 代码如下: QPrinter printer_pixmap(QPrinter::HighResolution); printer_pixmap.setPageS 在另一篇关于修改Tooltip样式的笔记,提到了可以用 html 语法来控制和设置控件样式 (笔记连接:https://blog.csdn.net/Leo_csdn_/article/detai... QObject::tr("<h1><font color = green>%1</font>的人品指数:<font color = orange>%2</font>" "<h4>点评:奸雄,实实在在的奸雄,宁可我负人人,不可人人负我,"... I'm trying to convert an HTML file to PDF. The whole idea is to create a pdf with many pages, filling the first one with the HTML file contents. Currently I'm trying to do just that, and the code is:#... 在word,它支持编辑。如果想让它默认直接用word打开,可以使用word的另存为功能,另存为一个正在的word文档。但是,这个word文档的图片,仍然是以链接方式保存在word,如果删除了原图片,将无法在word显示。解决的办法是:1)手工将图片链接改为直接插入(选图片,右键“更改图片”);2)使用VBA,自动遍历图片链接并 I'm trying to convert an HTML file to PDF. The whole idea is to create a pdf with many pages, filling the first one with the HTML file contents. Currently I'm trying to do just that, and the code is:#... 一、Qt绘图和导出文件的基本原理 Qt的二维图形引擎是基于QPainter类的。QPainter既可以绘制几何形状(点、线、矩形、椭圆、弧形、弦行、饼状图、多边形和贝塞尔曲线),也可以绘制像素映射、图像和文字。(参考《C++ text-indent属性介绍属性值单位:em,1em 就代表缩进1个字,2em缩进2个字.....。注意:text-indent属性的值支持为负数。(相关教程推荐:html入门教程)演示代码: 设置首行缩进 p{ text-indent: 2em; } ... QtWebkits在Qt5.6以上版本被淘汰了,不可用,需要使用QWebEngine; 安装Qt的时候需要勾选QWebEngine,这样才可以使用该模块; QWebEngine目前不支持MinGW编译器(Project ERROR: Unknown module(s) in QT: webenginewidgets),只支持MSVC编译器; 二、使用说明 1、在.pro文件添加模块 QT += webenginewidgets 其html语句有显示图片的语句 但只能显示png格式的图片,不能显示jpg格式图片。 经过排查:语法,文件路径等都正确,最终在stack overflow 找到 原因:在执行程序没有安装 jpg图形格式的plugin https://stackoverflow.com/questions/14878670/qt-does-... QString currentDir = QDir::currentPath(); //生成pdf保存的路径 QString file_path = QFileDialog::getExistingDirectory(thi... SOURCES += html2pdf.cpp target.path = $$[QT_INSTALL_EXAMPLES]/webenginewidgets/html2pdf INST... 1.需要用的类pro文件添加 QT += printsupportQPdfWriter:写pdf的类QTextDocument:支持html表格、图片的类2.需要打印的界面这里示例打印两个表格,一个水平方向的,一个垂直方向的,加一张图片。3.保存的pdf效果如下 4.源码添加两个表格和一张图片 保存pdf槽函数 WPdfWriter类,在这个类,为了节约时间,导出的数据都是固定的。