Qt
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(); 结果如下:
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(); 效果如下:
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(); 效果如下:
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$ |