Qt实现多图片合成PDF文件

发布时间 2023-03-22 21:13:56作者: 十一的杂文录

需求:纯Qt,把多张图片合成到一个PDF文件中

 

 

// 合成PDF

// include <QPdfWriter>
QString pdfFileName = "D:\\a.pdf";
QStringList imageFileNameList = {"C:\\Users\\admin\\Documents\\Eloam\\Image\\1.jpg",
        "C:\\Users\\admin\\Documents\\Eloam\\Image\\2.jpg",
        "C:\\Users\\admin\\Documents\\Eloam\\Image\\3.jpg"};

QFile pdfFile(pdfFileName);
pdfFile.open(QIODevice::WriteOnly);
QPdfWriter *pdfWrite = new QPdfWriter(&pdfFile);

pdfWrite->setPageSize(QPagedPaintDevice::A4);
pdfWrite->setResolution(300);
pdfWrite->setPageMargins(QMarginsF(30,30,30,30));
pdfWrite->setPageOrientation(QPageLayout::Portrait); // 设置方向,Portrait 竖,Landscape 横

QPainter *pPainter = new QPainter(pdfWrite);
QRect rect = pPainter->viewport();
QPixmap img;
QSize imgSize;
for (int i=0;i<imageFileNameList.count();i++)
{
    // 将图片写入PDF页面
    img.load(imageFileNameList.at(i));
    imgSize = img.size();
    imgSize.scale(rect.size(), Qt::KeepAspectRatio);

    pPainter->setViewport((rect.width() - imgSize.width()) / 2, (rect.height() - imgSize.height()) / 2, imgSize.width(), imgSize.height());
    pPainter->setWindow(img.rect());
    pPainter->drawPixmap(0,0,img);

    if((i+1) != imageFileNameList.count())
        pdfWrite->newPage();
}

delete pPainter;
pPainter = nullptr;
delete pdfWrite;
pdfWrite = nullptr;
pdfFile.close();