多语言展示
当前在线:379今日阅读:60今日分享:41

Qt如何导出pdf

Qt中如何让某个窗口(QWidget),某个控件,某个报表以及其中的文字、图片等保存在pdf中呢。       Qt4中主要利用QPrinter来实现,QPrinter不止可以操作打印机来打印纸张文件,并且可以将文件保存至磁盘,存储为pdf格式的文件。       Qt5中更简单了,可以用QPdfWriter来实现。
工具/原料

Qt

方法/步骤
1

Qt5中新出来的类QPdfWriter,可以很快实现导出pdf,只需要调用QPainter绘画文字、图片即可。QPdfWriter中还有如下方法:void setCreator(const QString & creator)//设置PDF作者bool setPageLayout(const QPageLayout & newPageLayout)//设置新页面的页面布局bool setPageMargins(const QMarginsF & margins)//设置页边距bool setPageMargins(const QMarginsF & margins, QPageLayout::Unit units)bool setPageOrientation(QPageLayout::Orientation orientation)bool setPageSize(const QPageSize & pageSize)//设置页面大小A4,B4void setResolution(int resolution)//设置分辨率void setTitle(const QString & title)//设置标题比如绘画Text:    QFile f('E://QPdfWriter.pdf');      f.open(QIODevice::WriteOnly);      QPdfWriter* writer = new QPdfWriter(&f);      QPainter* p = new QPainter(writer);      writer->setPageSize(QPagedPaintDevice::A5);      p->drawText(QRect(100, 100, 2000, 200), 'test1');//第一个页面      writer->newPage();      p->drawText(QRect(100, 100, 2000, 200), 'test2');//第二个页面      delete p;      delete writer;      f.close();   结果如下:

2

QPrinter通过图片生成pdf 代码如下:   //图片生成pdf      QPrinter printerPixmap(QPrinter::HighResolution);      printerPixmap.setPageSize(QPrinter::A4);  //设置纸张大小为A4      printerPixmap.setOutputFormat(QPrinter::PdfFormat);  //设置输出格式为pdf      printerPixmap.setOutputFileName('E:\\test_pixmap.pdf');   //设置输出路径      QPixmap pixmap = QPixmap::grabWidget(ui.celllViewWidget, ui.celllViewWidget->rect());  //获取界面的图片        QPainter painterPixmap;      painterPixmap.begin(&printerPixmap);      QRect rect = painterPixmap.viewport();      int multiple = rect.width() / pixmap.width();      painterPixmap.scale(multiple, multiple); //将图像(所有要画的东西)在pdf上放大multiple-1倍      painterPixmap.drawPixmap(0, 0, pixmap);  //画图      painterPixmap.end();  效果如下:

3

QPrinter将文本生成pdf//文本生成pdf      QPrinter printerText;      printerText.setOutputFormat(QPrinter::PdfFormat);      printerText.setOutputFileName('E:\\test_text.pdf');      QPainter painterText;      painterText.begin(&printerText);        QDateTime current_date_time = QDateTime::currentDateTime();      QString current_date = current_date_time.toString('yyyy-MM-dd hh:mm:ss ddd');        QPoint point(10, 10);      for (int i = 1; i <= 5; i++)      {          QString message = QString('%1          %2          %3').arg(QString::number(i)).arg(current_date).arg(QStringLiteral('北京'));          int y = point.y();          point.setY(y + 20);          painterText.drawText(point, message);          message.clear();      }      //printer_text.newPage();  //生成新的一页,可继续插入      painterText.end();    效果如下:

4

HTML生成pdf//Html生成PDF      QFile file('E://a.txt');      if (!file.open(QIODevice::ReadOnly | QIODevice::Text))          return;      QTextStream in(&file);      QString html = in.readAll();      file.close();      QPrinter printerHtml;      printerHtml.setPageSize(QPrinter::A4);      printerHtml.setOutputFormat(QPrinter::PdfFormat);      printerHtml.setOutputFileName('E:\\test_html.pdf');              QTextDocument textDocument;      textDocument.setHtml(html);      textDocument.print(&printerHtml);      textDocument.end();   a.txt 文件中html内容:        无标题文档                  序列      项目      价格              1      水立方      2$              2      鸟巢      4$             效果如下

推荐信息