QT生成PDF文档
//生成PDF文檔,str為傳入的學(xué)號
CreatePDF(QVector<QString> str)
{//保存程序當(dāng)前路徑QString currentDir = QDir::currentPath();//生成pdf保存的路徑QString file_path = QFileDialog::getExistingDirectory(this,"請選擇保存路徑","C:\\Users\\Administrator\\Desktop");if(file_path.isEmpty()){return;QMessageBox::warning(this,"提示","路徑不能為空");}//將程序的執(zhí)行路徑設(shè)置到filePath下QDir tempDir;tempDir.setCurrent(file_path);//qDebug()<<tempDir.currentPath();//進(jìn)度條QProgressBar *m_pProgressBar = new QProgressBar(this);m_pProgressBar->setOrientation(Qt::Horizontal); // 水平方向m_pProgressBar->setMinimum(1); // 最小值m_pProgressBar->setMaximum(str.size()); // 最大值m_pProgressBar->setMaximumHeight(15);m_pProgressBar->setMinimumWidth(60);m_pProgressBar->setVisible(true);for(int i=0;i<str.size();i++){m_pProgressBar->setValue(i);QCoreApplication::processEvents();QPixmap qrimage=GenerateQRcode(str.at(i));//Qt5 pdfwriter生成pdfQString fileName=str.at(i)+".pdf";//qDebug()<<str.at(i);QFile pdfFile(fileName);//判斷文件是否存在if(QFile::exists(fileName)){QMessageBox::StandardButton reply;reply = QMessageBox::question(this, "提示", "文件已經(jīng)存在,點(diǎn)擊是將覆蓋原文件", QMessageBox::Yes | QMessageBox::No);if(reply == QMessageBox::Yes){continue;}else{return;}}else{// 打開要寫入的pdf文件pdfFile.open(QIODevice::WriteOnly);QPdfWriter* pPdfWriter = new QPdfWriter(&pdfFile); // 創(chuàng)建pdf寫入器pPdfWriter->setPageSize(QPagedPaintDevice::A4); // 設(shè)置紙張為A4pPdfWriter->setResolution(300); // 設(shè)置紙張的分辨率為300,因此其像素為3508X2479int iMargin = 60; // 頁邊距pPdfWriter->setPageMargins(QMarginsF(iMargin, iMargin, iMargin, iMargin));QPainter* pPdfPainter = new QPainter(pPdfWriter); // qt繪制工具// 標(biāo)題,居中QTextOption option(Qt::AlignHCenter | Qt::AlignVCenter);option.setWrapMode(QTextOption::WordWrap);//二維碼pPdfPainter->drawPixmap(1600,70,qrimage);//字體QFont font;font.setFamily("simhei.ttf");//標(biāo)題,字號int fontSize = 22;font.setPointSize(fontSize);pPdfPainter->setFont(font); // 為繪制工具設(shè)置字體pPdfPainter->drawText(QRect(0, 0, 1980, 100),Qt::AlignHCenter|Qt::AlignBottom,"青少年兒童健康體檢表");//option.setWrapMode(QTextOption::WordWrap);//畫表格pPdfPainter->setFont(QFont("", 10));pPdfPainter->drawText(20,180,"姓名:");pPdfPainter->drawText(500,180,"性別:");pPdfPainter->drawText(1000,180,"年齡:");pPdfPainter->drawText(20,250,"班級:");QDate date=QDate::currentDate();QString create_time=date.toString("yyyy/MM/dd");pPdfPainter->drawText(500,250,QString("體檢日期:%1").arg(create_time));pPdfPainter->drawText(20,320,QString("編號:%1").arg(str.at(i)));// 標(biāo)題下邊留白int iTop = 350;// 左側(cè)縮進(jìn)int iLeft = 20;// 設(shè)置畫筆顏色、寬度//pPdfPainter.setPen(QPen(QColor(0, 160, 230), 2));pPdfPainter->setPen(2);// 設(shè)置畫刷顏色//pPdfPainter->setBrush(QColor(255, 160, 90));pPdfPainter->drawRect(iLeft, iTop, 1980, 2750);//表格矩形方框pPdfPainter->drawLine(iLeft,iTop+100,iLeft+1980,iTop+100);pPdfPainter->drawLine(iLeft,iTop+500,iLeft+1980,iTop+500);pPdfPainter->drawLine(iLeft,iTop+1000,iLeft+1980,iTop+1000);pPdfPainter->drawLine(300,iTop,300,iTop+2750);pPdfPainter->drawText(iLeft+50,iTop+60,"檢查項(xiàng)目");pPdfPainter->drawText(iLeft+900,iTop+60,"內(nèi)容");pPdfPainter->drawText(iLeft+50,iTop+260,"體成分");pPdfPainter->drawText(iLeft+50,iTop+760,"脊柱");pPdfPainter->drawText(iLeft+50,iTop+1260,"骨齡");pPdfWriter->newPage();pPdfPainter->drawText(50,1260,"骨齡");delete pPdfPainter;delete pPdfWriter;pdfFile.close();//將程序當(dāng)前路徑設(shè)置為原來的路徑}}tempDir.setCurrent(currentDir);delete m_pProgressBar;QMessageBox::warning(this,"提示","導(dǎo)出完成");
}
實(shí)現(xiàn)功能,根據(jù)傳入ID批量生成PDF文檔并帶有二維碼,選擇文件路徑并判斷生成的pdf文件是否存在
效果圖:
?
總結(jié)
- 上一篇: 女人跳槽:最重要的是你的独立,你的快乐
- 下一篇: C++递归算法