将QTableWidget内容打印到Pdf中 [英] Print QTableWidget content into Pdf

查看:66
本文介绍了将QTableWidget内容打印到Pdf中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以使用QPainter和QPdfWriter将QAbstractItemView(例如QTableWidget)的内容打印到QPaintDevice(PDF文件)中?

is there any way to print the content of of a QAbstractItemView (QTableWidget for example) into a QPaintDevice (PDF file) using QPainter ans QPdfWriter ?

非常感谢您的帮助,她是最终的验证码:

thanks a lot for your insear, her is the final code:

 QPdfWriter pdf("D:/padf.pdf");
    pdf.setPageSize(QPagedPaintDevice::A4);
    pdf.setPageMargins(QMargins(30,30,30,30));


    QPainter *painter= new QPainter(&printer);
    painter->setPen(Qt::black);
    painter->setFont(QFont("Time",60));



    QTableWidget table;
    table.setFont(QFont("Ariel",60));
    table.setColumnCount(4);
    table.setRowCount(100);

    int c = 0;
    int b = 0;

    for(int i = 0;i< 100 ; i++)
    {
        for(int h = 0 ;h<4;h++)
        {
            table.setItem(i,h,new QTableWidgetItem("test \n test"));
        }
    }
    table.resizeColumnsToContents();
    table.resizeRowsToContents();

    for( int i = 0; i < 4 ; i++ ) {

        c += table.columnWidth(i);


    }

    for( int i = 0; i < 100 ; i++ ) {
        b += table.rowHeight(i);
    }

  table.setFixedSize(c+50,b+50);
  table.render(painter,QPoint(1000,1000));
  painter->end();

推荐答案

此示例摘自

this example taken from This Forum prints the table into the PDF file.

QPrinter printer(QPrinter::PrinterResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setOrientation(QPrinter::Landscape);
printer.setOutputFileName(strFile);

QTextDocument doc;

QString text("<table><thead>");
text.append("<tr>");
for (int i = 0; i < tbl->columnCount(); i++) {
    text.append("<th>").append(tbl->horizontalHeaderItem(i)->data(Qt::DisplayRole).toString()).append("</th>");
}
text.append("</tr></thead>");
text.append("<tbody>");
for (int i = 0; i < tbl->rowCount(); i++) {
    text.append("<tr>");
    for (int j = 0; j < tbl->columnCount(); j++) {
        QTableWidgetItem *item = tbl->item(i, j);
        if (!item || item->text().isEmpty()) {
            tbl->setItem(i, j, new QTableWidgetItem("0"));
        }
        text.append("<td>").append(tbl->item(i, j)->text()).append("</td>");
    }
    text.append("</tr>");
}
text.append("</tbody></table>");
doc.setHtml(text);
doc.setPageSize(printer.pageRect().size());
doc.print(&printer);

这篇关于将QTableWidget内容打印到Pdf中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆