123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- #pragma execution_character_set("utf-8")
- #include "PrintAPI.h"
- #include <QtPrintSupport/QPrintPreviewDialog>
- #include <QApplication>
- #include <QDesktopWidget>
- #include <QTextDocument>
- PrintAPI *PrintAPI::_instance = 0;
- PrintAPI::PrintAPI(QObject *parent) : QObject(parent)
- {
- }
- void PrintAPI::PrintA4(QString title, QString subTitle, QList<QString> columnNames, QList<int> columnWidths, QStringList content, bool landscape, bool check, QPrinter::PageSize pageSize)
- {
- //计算行数列数
- int columnCount = columnNames.count();
- int rowCount = content.count();
- //清空原有数据,确保每次都是新的数据
- html.clear();
- //表格开始
- html.append("<table border='0.5' cellspacing='0' cellpadding='3'>");
- //标题占一行,居中显示
- if (title.length() > 0)
- {
- html.append(QString("<tr><td align='center' style='vertical-align:middle;font-weight:bold;' colspan='%1'>").arg(columnCount));
- html.append(title);
- html.append("</td></tr>");
- }
- //副标题占一行,左对齐显示
- if (subTitle.length() > 0)
- {
- html.append(QString("<tr><td align='left' style='vertical-align:middle;' colspan='%1'>").arg(columnCount));
- html.append(subTitle);
- html.append("</td></tr>");
- }
- //循环写入字段名,字段名占一行,居中显示
- if (columnCount > 0)
- {
- html.append("<tr>");
- for (int i = 0; i < columnCount; i++)
- {
- html.append(QString("<td width='%1' bgcolor='lightgray' align='center' style='vertical-align:middle;'>").arg(columnWidths.at(i)));
- html.append(columnNames.at(i));
- html.append("</td>");
- }
- html.append("</tr>");
- }
- //循环一行行构建数据
- for (int i = 0; i < rowCount; i++)
- {
- QStringList value = content.at(i).split(";");
- html.append("<tr>");
- if (check)
- {
- if (value.at(value.count() - 1) == "历史记录")
- {
- for (int j = 0; j < columnCount; j++)
- {
- html.append(QString("<td width='%1' align='center' style='vertical-align:middle;'>"
- "<font color='red'>").arg(columnWidths.at(j)));
- html.append(value.at(j));
- html.append("</font></td>");
- }
- }
- else
- {
- for (int j = 0; j < columnCount; j++)
- {
- html.append(QString("<td width='%1' align='center' style='vertical-align:middle;'>").arg(columnWidths.at(j)));
- html.append(value.at(j));
- html.append("</td>");
- }
- }
- }
- else
- {
- for (int j = 0; j < columnCount; j++)
- {
- html.append(QString("<td width='%1' align='center' style='vertical-align:middle;'>").arg(columnWidths.at(j)));
- html.append(value.at(j));
- html.append("</td>");
- }
- }
- html.append("</tr>");
- }
- html.append("</table>");
- //调用打印机打印
- 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<QString> columnNames, QList<int> columnWidths, QStringList subTitle1, QStringList subTitle2, QStringList content, bool landscape, bool check, QPrinter::PageSize pageSize)
- {
- //计算列数
- int columnCount = columnNames.count();
- //清空原有数据,确保每次都是新的数据
- html.clear();
- //表格开始
- html.append("<table border='0.5' cellspacing='0' cellpadding='3'>");
- //标题占一行,居中显示
- if (title.length() > 0)
- {
- html.append(QString("<tr><td align='center' style='vertical-align:middle;font-weight:bold;' colspan='%1'>").arg(columnCount));
- html.append(title);
- html.append("</td></tr>");
- }
- //循环添加副标题/字段名/内容
- int count = content.count();
- for (int i = 0; i < count; i++)
- {
- //加个空行隔开
- html.append(QString("<tr><td colspan='%1'>").arg(columnCount));
- html.append("</td></tr>");
- //副标题1
- if (subTitle1.count() > 0 && subTitle1.count() > i)
- {
- if (subTitle1.at(i).length() > 0)
- {
- html.append(QString("<tr><td align='left' style='vertical-align:middle;' colspan='%1'>").arg(columnCount));
- html.append(subTitle1.at(i));
- html.append("</td></tr>");
- }
- }
- //副标题2
- if (subTitle2.count() > 0 && subTitle2.count() > i)
- {
- if (subTitle2.at(i).length() > 0)
- {
- html.append(QString("<tr><td align='left' style='vertical-align:middle;' colspan='%1'>").arg(columnCount));
- html.append(subTitle2.at(i));
- html.append("</td></tr>");
- }
- }
- //逐个添加字段名称
- if (columnCount > 0)
- {
- html.append("<tr>");
- for (int i = 0; i < columnCount; i++)
- {
- html.append(QString("<td width='%1' bgcolor='lightgray' align='center' style='vertical-align:middle;'>").arg(columnWidths.at(i)));
- html.append(columnNames.at(i));
- html.append("</td>");
- }
- html.append("</tr>");
- }
- QStringList list = content.at(i).split(";");
- //逐个添加数据
- int rowCount = list.count();
- for (int j = 0; j < rowCount; j++)
- {
- html.append("<tr>");
- 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("<td width='%1' align='center' style='vertical-align:middle;'>"
- "<font color='red'>").arg(columnWidths.at(k)));
- html.append(value.at(k));
- html.append("</font></td>");
- }
- }
- else
- {
- for (int k = 0; k < valueCount - 1; k++)
- {
- html.append(QString("<td width='%1' align='center' style='vertical-align:middle;'>").arg(columnWidths.at(k)));
- html.append(value.at(k));
- html.append("</td>");
- }
- }
- }
- else
- {
- for (int k = 0; k < valueCount; k++)
- {
- html.append(QString("<td width='%1' align='center' style='vertical-align:middle;'>").arg(columnWidths.at(k)));
- html.append(value.at(k));
- html.append("</td>");
- }
- }
- html.append("</tr>");
- }
- }
- html.append("</table>");
- //调用打印机打印
- 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 << "<center><p><font size='12'>电缆结构检验报告</font></p></center>";
- html << "<table border='0.0' cellspacing='0' cellpadding='6'>";
- QString index = QString("报告编号: %1").arg(reportdata.reportindex);
- QString time = QString("检验日期: %1").arg(reportdata.reportdate);
- html << "<tr>";
- html << QString("<td width='780' %1>%2</td>").arg(style).arg(index);
- html << QString("<td width='360' %1>%2</td>").arg(style).arg(time);
- html << "</tr>";
- html << "</table>";
- html << "<table border='0.5' cellspacing='0' cellpadding='5'>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("设备名称");
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg(reportdata.devicename);
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("环境温度");
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg(reportdata.temperature);
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("设备状态");
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg(reportdata.devicestate);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("试样编号");
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg(reportdata.tempindex);
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("试样名称");
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg(reportdata.tempname);
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("电缆颜色");
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg(reportdata.cablecolor);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("规格型号");
- html << QString("<td width='480' align = 'center' colspan='3' %1>%2</td>").arg(style).arg(reportdata.models);
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("数量(米)");
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg(reportdata.count);
- html << "</tr>";
- html << "</table>";
- html << "<table border='0.5' cellspacing='0' cellpadding='5'>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("送检单位");
- html << QString("<td width='800' align = 'center' colspan='6' %1>%2</td>").arg(style).arg(reportdata.manufacturer);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("生产厂家");
- html << QString("<td width='384' align = 'center' colspan='3' %1>%2</td>").arg(style).arg(reportdata.submissionunit);
- html << QString("<td width='256' align = 'center' %1>%2</td>").arg(style).arg("生产日期");
- html << QString("<td width='360' align = 'center' colspan='2' %1>%2</td>").arg(style).arg(reportdata.productiondate);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("测量点数据(mm)");
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.Data1);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.Data2);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.Data3);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.Data4);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.Data5);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.Data6);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("外形尺寸(mm)");
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("最大外径");
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.MaxRadius);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("最小外径");
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.MinRadius);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("平均外径");
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg(reportdata.meanRadius);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("最薄点(mm)");
- html << QString("<td width='266' align = 'center' colspan='2' %1>%2</td>").arg(style).arg(reportdata.thinnestpoint);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("平均厚度(mm)");
- html << QString("<td width='400' align = 'center' colspan='3' %1>%2</td>").arg(style).arg(reportdata.meanhoudu);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("最大点(mm)");
- html << QString("<td width='266' align = 'center' colspan='2' %1>%2</td>").arg(style).arg(reportdata.maxpoint);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("同心度%");
- html << QString("<td width='400' align = 'center' colspan='3' %1>%2</td>").arg(style).arg(reportdata.tongxindu);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("偏心度%");
- html << QString("<td width='266' align = 'center' colspan='2' %1>%2</td>").arg(style).arg(reportdata.pianxindu);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("截面积(mm²)");
- html << QString("<td width='400' align = 'center' colspan='3' %1>%2</td>").arg(style).arg(reportdata.jiemianji);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("椭圆度%");
- html << QString("<td width='800' align = 'center' colspan='6' %1>%2</td>").arg(style).arg(reportdata.tuoyuandu);
- html << "</tr>";
- html << "</table>";
- html << "<center><p><font size='12'>整体指标</font></p></center>";
- html << "<table border='0.5' cellspacing='0' cellpadding='5'>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("平均厚度");
- html << QString("<td width='266' align = 'center' colspan='2' %1>%2</td>").arg(style).arg(reportdata.meanhouduall);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("同心度%");
- html << QString("<td width='400' align = 'center' colspan='3' %1>%2</td>").arg(style).arg(reportdata.tongxinduall);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("最大厚度");
- html << QString("<td width='266' align = 'center' colspan='2' %1>%2</td>").arg(style).arg(reportdata.maxhouduall);
- html << QString("<td width='134' align = 'center' %1>%2</td>").arg(style).arg("偏心度%");
- html << QString("<td width='400' align = 'center' colspan='3' %1>%2</td>").arg(style).arg(reportdata.pianxinduall);
- html << "</tr>";
- html << "<tr>";
- html << QString("<td width='160' align = 'center' %1>%2</td>").arg(style).arg("内空截面积(mm²)");
- html << QString("<td width='800' align = 'center' colspan='6' %1>%2</td>").arg(style).arg(reportdata.jiemianjiall);
- html << "</tr>";
- html << "<tr>";
- image = image.scaled(300, image.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
- image.save("out.jpg", "jpg");
- style = "style='vertical-align:middle;'";
- html << QString("<td width='180' style='font-size:18px' align ='center' %1>%2</td>").arg(style).arg("备注");
- html << QString("<td width='1080' align='center' colspan='6' %1><img src='%2'></td>").arg(style).arg("out.jpg");
- html << "</tr>";
- html << "</table>";
- html << "<p style='font-size:18px'>检验员: 恋上小鹿的叶子</p>";
- //调用打印机打印
- 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);
- }
|