1:使用方法:
QTextDocument是Qt的多文本引擎,使用QTextDocument调用打印,以及打印预览
//打印需要的头文件
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
//打印预览需要的头文件
#include <QPrintPreviewDialog>
//print打印对应的槽函数
void test::print()
{
//生成html文件
QString fileContent = "";
QFile file1(htmlfileName); //htmlfileName:本地的制作好的html文件
if (file1.open(QIODevice::ReadOnly))
{
QTextStream fs(&file1);
fs.setCodec("UTF-8"); //Qt 使用 UTF-8 编码读取文件,解决打印的文件中文乱码
fileContent = fs.readAll();
file1.close();
}
QPrinter printer(QPrinter::HighResolution);
QPrintDialog printDialog(&printer, this);
if (printDialog.exec()) {
QTextDocument textDocument;
textDocument.setHtml(fileContent);
textDocument.print(&printer);
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++打印预览+++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//打印预览
//调用QT自己带的阅览器
//点击打印预览文件对应的槽函数
void test::PrintPreviewFile()
{
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog preview(&printer, this);
preview.setMinimumSize(1000, 600);
//这里实现printPreviewSlot,就是预览显示内容
connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(printPreviewSlot(QPrinter*)));
preview.exec();
}
//在printPreviewSlot中实现阅览的内容
//这里使用的还是QTextDocument,将制作好的html加载上去
void test::printPreviewSlot(QPrinter *printer)
{
//生成html文件
QString fileContent = "";
QFile file1(htmlfileName); //htmlfileName:本地的制作好的html文件
if (file1.open(QIODevice::ReadOnly))
{
QTextStream fs(&file1);
fs.setCodec("UTF-8"); //Qt 使用 UTF-8 编码读取文件,解决打印的文件中文乱码
fileContent = fs.readAll();
file1.close();
}
QTextDocument textDocument;
textDocument.setHtml(fileContent);
textDocument.print(printer);
}
//关于打印阅览内容显示的相关问题
问题1:显示的图片不全,显示部分
原因:图片长宽像素太大,A4不能完全显示
解决:"<img src=\"%s\" width=\"%d\" height=\"%d\"/>\n" 指定长宽,无论多大小的图片都会按指定的width和height来显示
问题2:表格没有边框
原因:html中对表格边框未设置
解决:
<style type="text/css">
.test
{
//重点设置边框以及设置边框颜色为黑色
border-right-width:1px; border-right-style:solid; border-right-color:#000000;
border: 1px solid #000000;border-collapse:collapse;vertical-align:middle;
}
</style>
1:html的<table>标签设置
"<table width=\"100%%\" border=\"1\" cellspacing=\"0\" cellpadding=\"1\" class=\"test\">\n"
2:tain添加带有边框的table头:test
"<th align=center width=\"%d%%\" class=\"test\" height=\"15\">"
3:tain添加带有边框的table内容:
"<td align=center width=\"%d%%\" class=\"test\" height=\"15\">"