#pragma execution_character_set("utf-8") #include "PrintAPI.h" #include #include #include #include PrintAPI *PrintAPI::_instance = 0; PrintAPI::PrintAPI(QObject *parent) : QObject(parent) { } void PrintAPI::PrintA4(QString title, QString subTitle, QList columnNames, QList columnWidths, QStringList content, bool landscape, bool check, QPrinter::PageSize pageSize) { //计算行数列数 int columnCount = columnNames.count(); int rowCount = content.count(); //清空原有数据,确保每次都是新的数据 html.clear(); //表格开始 html.append(""); //标题占一行,居中显示 if (title.length() > 0) { html.append(QString(""); } //副标题占一行,左对齐显示 if (subTitle.length() > 0) { html.append(QString(""); } //循环写入字段名,字段名占一行,居中显示 if (columnCount > 0) { html.append(""); for (int i = 0; i < columnCount; i++) { html.append(QString(""); } html.append(""); } //循环一行行构建数据 for (int i = 0; i < rowCount; i++) { QStringList value = content.at(i).split(";"); html.append(""); if (check) { if (value.at(value.count() - 1) == "历史记录") { for (int j = 0; j < columnCount; j++) { html.append(QString(""); } } else { for (int j = 0; j < columnCount; j++) { html.append(QString(""); } } } else { for (int j = 0; j < columnCount; j++) { html.append(QString(""); } } html.append(""); } html.append("
").arg(columnCount)); html.append(title); html.append("
").arg(columnCount)); html.append(subTitle); html.append("
").arg(columnWidths.at(i))); html.append(columnNames.at(i)); html.append("
" "").arg(columnWidths.at(j))); html.append(value.at(j)); html.append("").arg(columnWidths.at(j))); html.append(value.at(j)); html.append("").arg(columnWidths.at(j))); html.append(value.at(j)); html.append("
"); //调用打印机打印 QPrinter printer; //设置输出格式 printer.setOutputFormat(QPrinter::NativeFormat); //设置纸张规格 printer.setPageSize(pageSize); //设置横向纵向及页边距 if (landscape) { printer.setOrientation(QPrinter::Landscape); printer.setPageMargins(10, 10, 10, 12, QPrinter::Millimeter); } else { printer.setOrientation(QPrinter::Portrait); printer.setPageMargins(10, 10, 10, 16, QPrinter::Millimeter); } QPrintPreviewDialog preview(&printer); preview.setWindowTitle("打印预览"); connect(&preview, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printView(QPrinter *))); preview.setGeometry(qApp->desktop()->availableGeometry()); preview.exec(); } void PrintAPI::PrintA4(QString title, QList columnNames, QList columnWidths, QStringList subTitle1, QStringList subTitle2, QStringList content, bool landscape, bool check, QPrinter::PageSize pageSize) { //计算列数 int columnCount = columnNames.count(); //清空原有数据,确保每次都是新的数据 html.clear(); //表格开始 html.append(""); //标题占一行,居中显示 if (title.length() > 0) { html.append(QString(""); } //循环添加副标题/字段名/内容 int count = content.count(); for (int i = 0; i < count; i++) { //加个空行隔开 html.append(QString(""); //副标题1 if (subTitle1.count() > 0 && subTitle1.count() > i) { if (subTitle1.at(i).length() > 0) { html.append(QString(""); } } //副标题2 if (subTitle2.count() > 0 && subTitle2.count() > i) { if (subTitle2.at(i).length() > 0) { html.append(QString(""); } } //逐个添加字段名称 if (columnCount > 0) { html.append(""); for (int i = 0; i < columnCount; i++) { html.append(QString(""); } html.append(""); } QStringList list = content.at(i).split(";"); //逐个添加数据 int rowCount = list.count(); for (int j = 0; j < rowCount; j++) { html.append(""); QString temp = list.at(j); QStringList value = temp.split("|"); int valueCount = value.count(); if (check) { //如果是历史记录则文字红色 if (value.at(valueCount - 1) == "1") { for (int k = 0; k < valueCount - 1; k++) { html.append(QString(""); } } else { for (int k = 0; k < valueCount - 1; k++) { html.append(QString(""); } } } else { for (int k = 0; k < valueCount; k++) { html.append(QString(""); } } html.append(""); } } html.append("
").arg(columnCount)); html.append(title); html.append("
").arg(columnCount)); html.append("
").arg(columnCount)); html.append(subTitle1.at(i)); html.append("
").arg(columnCount)); html.append(subTitle2.at(i)); html.append("
").arg(columnWidths.at(i))); html.append(columnNames.at(i)); html.append("
" "").arg(columnWidths.at(k))); html.append(value.at(k)); html.append("").arg(columnWidths.at(k))); html.append(value.at(k)); html.append("").arg(columnWidths.at(k))); html.append(value.at(k)); html.append("
"); //调用打印机打印 QPrinter printer; //设置输出格式 printer.setOutputFormat(QPrinter::NativeFormat); //设置纸张规格 printer.setPageSize(pageSize); //设置横向纵向及页边距 if (landscape) { printer.setOrientation(QPrinter::Landscape); printer.setPageMargins(10, 10, 10, 12, QPrinter::Millimeter); } else { printer.setOrientation(QPrinter::Portrait); printer.setPageMargins(10, 10, 10, 16, QPrinter::Millimeter); } QPrintPreviewDialog preview(&printer); preview.setWindowTitle("打印预览"); connect(&preview, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printView(QPrinter *))); preview.setGeometry(qApp->desktop()->availableGeometry()); preview.exec(); } void PrintAPI::printReport(ReportData reportdata, QImage image) { QString style = "style='font-size:18px;'"; html << "

电缆结构检验报告

"; html << ""; QString index = QString("报告编号: %1").arg(reportdata.reportindex); QString time = QString("检验日期: %1").arg(reportdata.reportdate); html << ""; html << QString("").arg(style).arg(index); html << QString("").arg(style).arg(time); html << ""; html << "
%2%2
"; html << ""; html << ""; html << QString("").arg(style).arg("设备名称"); html << QString("").arg(style).arg(reportdata.devicename); html << QString("").arg(style).arg("环境温度"); html << QString("").arg(style).arg(reportdata.temperature); html << QString("").arg(style).arg("设备状态"); html << QString("").arg(style).arg(reportdata.devicestate); html << ""; html << ""; html << QString("").arg(style).arg("试样编号"); html << QString("").arg(style).arg(reportdata.tempindex); html << QString("").arg(style).arg("试样名称"); html << QString("").arg(style).arg(reportdata.tempname); html << QString("").arg(style).arg("电缆颜色"); html << QString("").arg(style).arg(reportdata.cablecolor); html << ""; html << ""; html << QString("").arg(style).arg("规格型号"); html << QString("").arg(style).arg(reportdata.models); html << QString("").arg(style).arg("数量(米)"); html << QString("").arg(style).arg(reportdata.count); html << ""; html << "
%2%2%2%2%2%2
%2%2%2%2%2%2
%2%2%2%2
"; html << ""; html << ""; html << QString("").arg(style).arg("送检单位"); html << QString("").arg(style).arg(reportdata.manufacturer); html << ""; html << ""; html << QString("").arg(style).arg("生产厂家"); html << QString("").arg(style).arg(reportdata.submissionunit); html << QString("").arg(style).arg("生产日期"); html << QString("").arg(style).arg(reportdata.productiondate); html << ""; html << ""; html << QString("").arg(style).arg("测量点数据(mm)"); html << QString("").arg(style).arg(reportdata.Data1); html << QString("").arg(style).arg(reportdata.Data2); html << QString("").arg(style).arg(reportdata.Data3); html << QString("").arg(style).arg(reportdata.Data4); html << QString("").arg(style).arg(reportdata.Data5); html << QString("").arg(style).arg(reportdata.Data6); html << ""; html << ""; html << QString("").arg(style).arg("外形尺寸(mm)"); html << QString("").arg(style).arg("最大外径"); html << QString("").arg(style).arg(reportdata.MaxRadius); html << QString("").arg(style).arg("最小外径"); html << QString("").arg(style).arg(reportdata.MinRadius); html << QString("").arg(style).arg("平均外径"); html << QString("").arg(style).arg(reportdata.meanRadius); html << ""; html << ""; html << QString("").arg(style).arg("最薄点(mm)"); html << QString("").arg(style).arg(reportdata.thinnestpoint); html << QString("").arg(style).arg("平均厚度(mm)"); html << QString("").arg(style).arg(reportdata.meanhoudu); html << ""; html << ""; html << QString("").arg(style).arg("最大点(mm)"); html << QString("").arg(style).arg(reportdata.maxpoint); html << QString("").arg(style).arg("同心度%"); html << QString("").arg(style).arg(reportdata.tongxindu); html << ""; html << ""; html << QString("").arg(style).arg("偏心度%"); html << QString("").arg(style).arg(reportdata.pianxindu); html << QString("").arg(style).arg("截面积(mm²)"); html << QString("").arg(style).arg(reportdata.jiemianji); html << ""; html << ""; html << QString("").arg(style).arg("椭圆度%"); html << QString("").arg(style).arg(reportdata.tuoyuandu); html << ""; html << "
%2%2
%2%2%2%2
%2%2%2%2%2%2%2
%2%2%2%2%2%2%2
%2%2%2%2
%2%2%2%2
%2%2%2%2
%2%2
"; html << "

整体指标

"; html << ""; html << ""; html << QString("").arg(style).arg("平均厚度"); html << QString("").arg(style).arg(reportdata.meanhouduall); html << QString("").arg(style).arg("同心度%"); html << QString("").arg(style).arg(reportdata.tongxinduall); html << ""; html << ""; html << QString("").arg(style).arg("最大厚度"); html << QString("").arg(style).arg(reportdata.maxhouduall); html << QString("").arg(style).arg("偏心度%"); html << QString("").arg(style).arg(reportdata.pianxinduall); html << ""; html << ""; html << QString("").arg(style).arg("内空截面积(mm²)"); html << QString("").arg(style).arg(reportdata.jiemianjiall); html << ""; html << ""; image = image.scaled(300, image.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); image.save("out.jpg", "jpg"); style = "style='vertical-align:middle;'"; html << QString("").arg(style).arg("备注"); html << QString("").arg(style).arg("out.jpg"); html << ""; html << "
%2%2%2%2
%2%2%2%2
%2%2
%2
"; html << "

检验员: 恋上小鹿的叶子

"; //调用打印机打印 QPrinter printer; //设置输出格式 printer.setOutputFormat(QPrinter::NativeFormat); //设置纸张规格 printer.setPageSize(QPrinter::A4); //设置横向纵向及页边距 printer.setOrientation(QPrinter::Landscape); printer.setPageMargins(10, 10, 10, 10, QPrinter::Millimeter); QPrintPreviewDialog preview(&printer); preview.setWindowTitle("打印预览"); preview.setWindowFlags(Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint); connect(&preview, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printView(QPrinter *))); preview.showMaximized(); preview.exec(); } void PrintAPI::printView(QPrinter *printer) { QTextDocument txt; txt.setHtml(html.join("")); txt.print(printer); }