天天看點

QT實作導出PDF、列印預覽

void EditReportView::on_m_PreviewPushButton_clicked()

{

    SaveXmlToPDF();

    ShowPrintPreviewDialog();

}

void EditReportView::ShowPrintPreviewDialog()

{

    QPrinter printer;

    QPrintPreviewDialog previewDialog(&printer, this);

    connect(&previewDialog, SIGNAL(paintRequested(QPrinter*)), this, SLOT(Preview(QPrinter*)));

    QDesktopWidget* desktopWidget = QApplication::desktop();

    QRect screenRect = desktopWidget->screenGeometry();

    int ActScreenW = screenRect.width();

    int ActScreenH = screenRect.height();

    previewDialog.setMinimumHeight(ActScreenH);

    previewDialog.setMinimumWidth(ActScreenW);

    previewDialog.exec(); //列印對話框顯示,paintRequest觸發

}

void EditReportView::Preview(QPrinter* printer)

{

    ui.textEdit->print(printer);

}

void EditReportView::SaveXmlToPDF()

{

    QString patient_path = DirectoryController::Instance().CreatePatientDirectory(this->m_ReportModel.GetPatientId());

    QString case_path = DirectoryController::Instance().CreateCaseDirectory(patient_path, this->m_ReportModel.GetReportId());

    QString report_file_name = case_path + "/report.pdf";

    printf("report_file_name = %s\n", report_file_name.toLocal8Bit().data());

    QDateTime current_date_time = QDateTime::currentDateTime();

    QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm:ss");

    QDateTime datatime = QDateTime::fromString(this->m_CaseModel.GetCaseTime(), "yyyyMMddhhmmss");

    QLocale locale = QLocale::English;//指定英文顯示

    QString case_create_time = locale.toString(datatime, "yyyy-MM-dd hh:mm:ss");

    QString patient_info = QString(QStringLiteral("患者ID:%1    患者姓名:%2    治療部位:%3    操作醫生:%4")

        .arg(this->m_PatientModel.GetPatientId())

        .arg(this->m_PatientModel.GetPatientName())

        .arg(this->m_CaseModel.GetTreatLocation())

        .arg(this->m_CaseModel.GetPhysicianName()));

    QString case_info = QString(QStringLiteral("治療日期:%1")

        .arg(case_create_time));

        //.arg(this->m_CaseModel.GetPhysicianName()));

    QStringList title;

    title.push_back(QStringLiteral("記錄ID"));

    title.push_back(QStringLiteral("擋位"));

    title.push_back(QStringLiteral("類型"));

    title.push_back(QStringLiteral("靶點坐标"));

    title.push_back(QStringLiteral("測量坐标"));

    title.push_back(QStringLiteral("開始時間"));

    title.push_back(QStringLiteral("停止時間"));

    QString html;

    html += "<h1 align=\"center\">" + QStringLiteral("實驗報告") + "</h1>";

    html += "<h4 align=\"left\">" + patient_info + "</h4>";

    html += "<h4 align=\"left\">" + case_info + "</h4>";

    html += "<h6 align=\"center\">" + QStringLiteral("----------------------------------------------------------------------------------------------------") + "</h6>";

    html += "<table width=\"630\" 0\" align=\"center\" style=\"border-collapse:collapse\";bordercolor=\"gray\">";

    html += "<tr>";

    for (int i = 0; i < title.count(); i++)

    {

        html += QString("<th>%1</th>").arg(title.at(i));

    }

    html += "</tr>";

    html += QString("<tr>  </tr>");

    vector<RecordModel> record_model;

    record_model = GetGlobalRecordController()->SearchRecord("case_id", this->m_CaseModel.GetCaseId(), GetGlobalDatabaseConnectionController()->m_sql_database);

    for (int i = 0; i < record_model.size(); i++)

    {

        html += "<tr align=\"center\"; font=\"15px\">"; 

        QString record_id = QStringLiteral("%1").arg(record_model[i].GetRecordId());

        QString gear = QStringLiteral("%1").arg(record_model[i].GetRecordGear());

        QString type = QStringLiteral("%1").arg(record_model[i].GetRecordTreatType());

        QString measuring_coordinates = QStringLiteral("%1").arg(record_model[i].GetRecordTargetCoordinates());

        QString target_coordinates = QStringLiteral("%1").arg(record_model[i].GetRecordMeasuringCoordinates());

        QDateTime start = QDateTime::fromString(record_model[i].GetRecordEndTime(), "yyyyMMddhhmmss");

        QString start_time = locale.toString(start, "hh:mm:ss");

        QString str_start_time = QStringLiteral("%1").arg(start_time);

        QDateTime stop = QDateTime::fromString(record_model[i].GetRecordStartTime(), "yyyyMMddhhmmss");

        QString end_time = locale.toString(start, "hh:mm:ss");

        QString str_end_time = QStringLiteral("%1").arg(end_time);

        html += QString("<td align = \"center\">%1</td>").arg(record_id);

        html += QString("<td align = \"center\">%1</td>").arg(gear);

        html += QString("<td align = \"center\">%1</td>").arg(type);

        html += QString("<td align = \"center\">%1</td>").arg(target_coordinates);

        html += QString("<td align = \"center\">%1</td>").arg(measuring_coordinates);

        html += QString("<td align = \"center\">%1</td>").arg(str_start_time);

        html += QString("<td align = \"center\">%1</td>").arg(str_end_time);

        html += "</tr>";

    }

    html += "</table>";

    html += "<p align=\"center\">" + QStringLiteral("----------------------------------------------------------------------------------------------------") + "</p>";

    html += "<h4 align=\"left\">" + QStringLiteral("病例描述:") + "</h4>";

    QString str_description = QStringLiteral("&nbsp;&nbsp;%1").arg(ui.m_DescriptionTextEdit->toPlainText());

    //html += "<p align=\"left\">" + str_description + "</p>";

    html += "<p align=\"left\">" + str_description + "</p>";

    if (ui.m_DescriptionTextEdit->toPlainText().trimmed() == nullptr)

    {

        html += "<p><br></p>";

    }

    html += "<h4 align=\"left\">" + QStringLiteral("<br>診斷資訊:") + "</h4>";

    QString str_diagnose = QStringLiteral("&nbsp;&nbsp;%1").arg(ui.m_DiagnoseInfoTextEdit->toPlainText());

    html += "<p align=\"left\">" + str_diagnose + "</p>";

    if (ui.m_DiagnoseInfoTextEdit->toPlainText().trimmed() == nullptr)

    {

        html += "<p><br></p>";

    }

    html += "<h4 align=\"left\">" + QStringLiteral("<br>治療方案:") + "</h4>";

    QString str_treat_programs = QStringLiteral("&nbsp;&nbsp;%1").arg(ui.m_TreatProgramsTextEdit->toPlainText());

    html += "<p align=\"left\">" + str_treat_programs + "</p>";

    if (ui.m_TreatProgramsTextEdit->toPlainText().trimmed() == nullptr)

    {

        html += "<p><br></p>";

    }

    html += "<h4 align=\"left\">" + QStringLiteral("<br>治療效果:") + "</h4>";

    QString str_treat_effect = QStringLiteral("&nbsp;&nbsp;%1").arg(ui.m_TreatEffectTextEdit->toPlainText());

    html += "<p align=\"left\">" + str_treat_effect + "</p>";

    if (ui.m_TreatEffectTextEdit->toPlainText().trimmed() == nullptr)

    {

        html += "<p><br></p>";

    }

    html += "<p align=\"center\">" + QStringLiteral("<br>----------------------------------------------------------------------------------------------------") + "</p>";

    html += "<p align=\"left\">" + QStringLiteral("備注:如對本報告單存在異議,請及時與本實驗室聯系!") + "</p>";

    html += "<p align=\"left\">" + QStringLiteral("報告生成時間:%1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;醫生簽名:").arg(current_date) + "</p>";

    QPrinter printer_html;

    printer_html.setPageSize(QPrinter::A4);

    printer_html.setOutputFormat(QPrinter::PdfFormat);

    printer_html.setOutputFileName(report_file_name);

    QTextDocument text_document;

    text_document.setHtml(html);

    text_document.print(&printer_html);

    text_document.end();

    ui.textEdit->setText(html);

    //QDesktopServices::openUrl(QUrl::fromLocalFile(report_file_name));//顯示PDF檔案

}

#pragma endregion

繼續閱讀