使用QPainter绘制pdf

qt绘制pdf主要步骤如下:

  1. 选择保存的pdf文件路径及名称
  2. 创建pdf文件
  3. 绘制pdf
  4. 关闭pdf文件
  5. 使用其他pdf阅读器打开(可不用)

主流程代码如下:

	//1 保存位置及文件名
	QString strPath = QFileDialog::getSaveFileName(nullptr , tr("保存到"), "", "Text Files (*.pdf)");
    if(strPath.isEmpty())
        return;
        
	//2 创建pdf文件
    QFile pdfFile(strPath);
    pdfFile.open(QIODevice::WriteOnly);
    QPdfWriter *pPdfWriter = new QPdfWriter(&pdfFile);
    pPdfWriter->setResolution(300);
    pPdfWriter->setPageSize(QPagedPaintDevice::A4);
    pPdfWriter->setPageMargins(QMarginsF(30, 30, 30, 30));

    //3 绘制pdf
    paintReport(pPdfWriter);

	//4
    delete pPdfWriter;
    pdfFile.close();

    //5 通过其他pdf阅读器来打开pdf文件
    QDesktopServices::openUrl(QUrl::fromLocalFile(strPath));

其中具体绘制的内容在paintSlideReport函数中,下面我们单独描述绘制方式。

void paintReport(QPdfWriter  *pPdfWriter)
{
    
    
	QPainter *pPainter = new QPainter(pPdfWriter);
    int nPdfWidth = pPainter->viewport().width();
    int nPdfHeight = pPainter->viewport().height();
    //以下内容为pPainter绘制PDF具体的内容 操作,绘制方法与绘制控件一样
    //...
    //比如 绘制报告标题
    int nTitleH = 120;
    pPainter->setFont(QFont("微软雅黑", 18,  QFont::Normal));
    pPainter->drawText(QRect(0, 0, nPdfWidth, nTitleH), Qt::AlignCenter, tr("试剂使用报告"));

	//比如 绘制图片,如公司log等
    int nLogoW = nPdfWidth / 5;	
    int nLogoH = 80;
    QPixmap pixmapLogo(":/rs_SystemSetting/Images/my_logo.png");
    pixmapLogo = pixmapLogo.scaled(nLogoW, nLogoH, Qt::IgnoreAspectRatio);
    painter->drawPixmap(0, 120, pixmapLogo);
    ...
    ...
    ...
	//最后释放pPainter内存吗,否则会造成内存泄漏
	delete pPainter
}

QPainter绘制方法可参考文章:https://blog.csdn.net/weixin_42887343/article/details/116739778

おすすめ

転載: blog.csdn.net/weixin_42887343/article/details/120950675