Qt如何导出pdf

2025-11-06 12:40:03

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,B4

void 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();  

结果如下:

Qt如何导出pdf

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();  

效果如下:

Qt如何导出pdf

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();  

 效果如下:

Qt如何导出pdf

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内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<html xmlns="http://www.w3.org/1999/xhtml">  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  

<title>无标题文档</title>  

</head>  

  

<body>  

<table width="200" border="1">  

  <tr>  

    <th scope="row">序列</th>  

    <td>项目</td>  

    <td>价格</td>  

  </tr>  

  <tr>  

    <th scope="row">1</th>  

    <td>水立方</td>  

    <td>2$</td>  

  </tr>  

  <tr>  

    <th scope="row">2</th>  

    <td>鸟巢</td>  

    <td>4$</td>  

  </tr>  

</table>  

</body>  

</html>  

效果如下

Qt如何导出pdf

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢