Qt导出pdf格式表格

预期目标如下:在这里插入图片描述
头文件:

#include
#include
#include
#include
#include
#include
#include

private:
QString m_html;

调用:
QDateTime dateTime = QDateTime::currentDateTime(); //当前日期和时间
QString ExportTime = dateTime.toString(“yyyyMMddhhmmsszzz”); //导出时间
QString pdfPath = path + ExportTime + “ExoprtShotScreenFile.pdf”;//导出路径

QPrinter printer_html;
printer_html.setPageSize(QPrinter::A4);
printer_html.setOutputFormat(QPrinter::PdfFormat);
printer_html.setOutputFileName(pdfPath);
m_html = “”;
writePdf();
QTextDocument text_document;
text_document.setHtml(m_html);
text_document.print(&printer_html);
text_document.end();

void QTabTreatVerifyPanel::writePdf()
{
///添加基本信息
QList rowsValues;
QList<QList> values;

//导出t1
rowsValues.append(QStringLiteral("机构名称"));
rowsValues.append(QStringLiteral("科室"));
values.append(rowsValues);

rowsValues.clear();
rowsValues.append(QStringLiteral("中医院"));
rowsValues.append(QStringLiteral("体检科"));
values.append(rowsValues);

rowsValues.clear();
rowsValues.append(QStringLiteral("人民医院"));
rowsValues.append(QStringLiteral("急诊科"));
values.append(rowsValues);

rowsValues.clear();
rowsValues.append(QStringLiteral("专科医院"));
rowsValues.append(QStringLiteral("发热门诊"));
values.append(rowsValues);

rowsValues.clear();
rowsValues.append(QStringLiteral("中西医结合"));
rowsValues.append(QStringLiteral("骨科"));
values.append(rowsValues);

QList<int> width;
width.append(30);
width.append(70);
addTable(QStringLiteral("东海市医院列表"), QStringLiteral("招牌科室"), 5, 2, width, values);

//导出t2
rowsValues.clear();
values.clear();
rowsValues.append(QStringLiteral("患者姓名"));
rowsValues.append(QStringLiteral("地址"));
rowsValues.append(QStringLiteral("年龄"));
rowsValues.append(QStringLiteral("性别"));
values.append(rowsValues);

rowsValues.clear();
rowsValues.append(QStringLiteral("张三"));
rowsValues.append(QStringLiteral("北京东郊"));
rowsValues.append(QStringLiteral("13"));
rowsValues.append(QStringLiteral("男"));
values.append(rowsValues);

rowsValues.clear();
rowsValues.append(QStringLiteral("李四"));
rowsValues.append(QStringLiteral("月球人"));
rowsValues.append(QStringLiteral("18"));
rowsValues.append(QStringLiteral("其他"));
values.append(rowsValues);

width.clear();
width.append(25);
width.append(25);
width.append(25);
width.append(25);

addTable(QStringLiteral("患者列表"), QStringLiteral("患者信息"), 3, 4, width, values);

}

void QTabTreatVerifyPanel::addTable(const QString& title, const QString& subTitle, int rows, int cols, QList colWidth, const QList<QList >& values)
{
m_html.append(“<table border=‘0.5’ cellspacing=‘0’ cellpadding=‘3’ width:100%>”);

//主标题
if (!title.isEmpty())
{
	m_html.append(QString("<tr><td align='center' style='vertical-align:middle;font-weight:bold;' colspan='%1'>").arg(cols));
	m_html.append(title);
	m_html.append("</td></tr>");
}

//副标题
if (!subTitle.isEmpty())
{
	m_html.append(QString("<tr><td align='left' style='vertical-align:middle;font-weight:bold;' colspan='%1'>").arg(cols));
	m_html.append(subTitle);
	m_html.append("</td></tr>");
}

//添加字段/字段值
for (int i = 0; i < rows; i++)
{
	m_html.append("<tr>");
	QList<QString> rowValues = values.at(i);
	for (int j = 0; j < cols; j++)
	{
		m_html.append(QString("<td width=%1% valign='center' style='vertical-align:middle;font-size:20px;'>").arg(colWidth.at(j)));
		m_html.append(rowValues.at(j));
		m_html.append("</td>");
	}
	m_html.append("</tr>");
}

m_html.append("</table><br /><br />");

}

<think>好的,用户想了解如何使用Qt导出PDF文件的示例代码。我需要结合用户提供的引用内容来回答。首先,用户提到了引用[1]和引用[2],其中引用[1]提到了保存文件对话框的使用,而引用[2]展示了如何导出带有表格、图片的PDF,特别是使用QPdfWriter和QPainter。 我应该先整理出导出PDF的基本步骤,比如创建QPdfWriter对象,设置文件名和页面属性,然后使用QPainter进行绘制。用户可能需要保存文件时选择路径,所以应该包含QFileDialog的示例,如引用[1]中的getSaveFileName。然后,引用[2]中的代码展示了如何添加图片和设置缩放,这部分需要详细说明。另外,可能用户还需要表格或文本的示例,所以可以补充相关代码。 需要注意代码的正确性,比如确保QPainter正确开始和结束,设置页面方向,处理路径等问题。同时,要提醒用户关于坐标系统的注意事项,比如原点在左上角,单位是点(1/72英寸)。可能还需要提到QPagedPaintDevice的其他设置,如分辨率。 最后,生成相关问题,比如如何添加表格、处理中文、设置页眉页脚等,这些可以帮助用户进一步学习。要确保回答结构清晰,步骤明确,代码示例正确,并且引用对应的参考文献。同时,检查是否有遗漏,比如是否需要处理字体或样式,但根据引用内容,可能暂时不需要深入。</think>以下是使用Qt导出PDF文件的示例代码及分步说明: ### 1. 基本PDF导出框架 ```cpp // 创建文件对话框选择保存路径 QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"), "", "*.pdf"); if (fileName.isEmpty()) return; // 创建PDF写入器 QPdfWriter pdfWriter(fileName); pdfWriter.setPageSize(QPagedPaintDevice::A4); pdfWriter.setResolution(300); // 设置分辨率[^2] pdfWriter.setPageOrientation(QPageLayout::Portrait); // 纵向布局 // 创建绘图工具 QPainter painter(&pdfWriter); ``` ### 2. 添加文本内容 ```cpp QFont font("宋体", 12); painter.setFont(font); painter.drawText(100, 100, "这是PDF文档标题"); // 坐标单位为点(1/72英寸) painter.drawText(100, 150, "生成时间:" + QDateTime::currentDateTime().toString()); ``` ### 3. 插入图片(引用[2]示例) ```cpp QPixmap logo(":/images/logo.png"); painter.save(); painter.translate(200, 300); // 移动坐标原点 painter.scale(0.5, 0.5); // 缩放图片 painter.drawPixmap(0, 0, logo); painter.restore(); ``` ### 4. 绘制表格 ```cpp // 绘制表格边框 painter.drawRect(100, 200, 400, 200); // 绘制表头 QStringList headers = {"姓名", "年龄", "部门"}; for(int i=0; i<headers.size(); ++i){ painter.drawText(100+i*130, 220, headers.at(i)); } // 绘制数据行示例 painter.drawText(100, 250, "张三"); painter.drawText(230, 250, "28"); painter.drawText(360, 250, "技术部"); ``` ### 5. 结束绘制 ```cpp painter.end(); ``` ### 关键参数说明: 1. 坐标系统:原点在页面左上角,X向右,Y向下,单位是点(1点=1/72英寸) 2. 分辨率设置:影响图像和文本的清晰度 3. 页面方向:`Portrait`(纵向)或`Landscape`(横向) 4. 字体处理:建议使用系统已安装字体,避免中文乱码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值