首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从模板创建用于在Qt中打印的PDF文档

从模板创建用于在Qt中打印的PDF文档
EN

Stack Overflow用户
提问于 2015-11-11 23:35:30
回答 1查看 19.8K关注 0票数 32

当用户在对话框窗口中插入数据(文档标题、发送者姓名和地址等)时,我编写了一个应用程序,然后我的应用程序应该从该用户数据生成一个pdf文件。

PDF文件应具有定义的布局,如下所示:

我试着用QPdfWriter来做这件事,但是在pdf中对齐文本时遇到了问题。下面是我的代码:

#include <QApplication>
#include <QtCore>
#include <QPrinter>
#include <QPdfWriter>
#include <QPainter>

QString currDate()
{
    QDate date = QDate::currentDate();
    return date.toString("dd.MM.yyyy");
}

void pdf(QString filename)
{
    QPdfWriter writer(filename);
    writer.setPageSize(QPagedPaintDevice::A4);
    writer.setPageMargins(QMargins(30, 30, 30, 30));

    QPainter painter(&writer);
    painter.setPen(Qt::black);
    painter.setFont(QFont("Times", 10));

    QRect r = painter.viewport();

    QString citydate = "City, ";
    citydate += currDate();

    painter.drawText(r, Qt::AlignRight, citydate);


QString sender = "COMPANY XYZ\n";
sender += "Random Street 12/314A\n";
sender += "123-1232 City\n";

painter.drawText(r, Qt::AlignLeft, sender);
    painter.end();
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    pdf("example1.pdf");

    return a.exec();
}

打印到pdf的日期在左边,但是:

  1. 我在处理更多文本时遇到了问题-如何将画笔“移动”到不同的位置,以及如何在页面内打印发送者姓名、文档标题和文档内容(画笔的translate方法足够了吗,或者可以更简单?)
  2. 我不知道如何处理分页符,以防文档内容很长(将分布在2页或更多页上)

谢谢

编辑

我也尝试过QTextDocument方法,但它很难编写任何文档,因为几乎所有的示例都可以在web上找到。我只想到了这一点:

void pdf(QString filename)
{
    QPrinter printer(QPrinter::PrinterResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setPaperSize(QPrinter::A4);
    printer.setOutputFileName(filename);
    printer.setPageMargins(QMarginsF(30, 30, 30, 30));

    QFont headerFont("Times New Roman", 8);
    QFont titleFont("Times New Roman", 14, QFont::Bold);

    QTextCharFormat txtformat = QTextCharFormat();


    QTextDocument doc;
    doc.setPageSize(printer.pageRect().size());

    QTextCursor* cursor = new QTextCursor(&doc);

    txtformat.setFont(headerFont);
    cursor->insertText("Company XYZ", txtformat);

    cursor->movePosition(QTextCursor::Right && QTextCursor::EndOfLine, QTextCursor::KeepAnchor, 1000);
    cursor->insertText(currDate(), txtformat);

    doc.print(&printer);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-14 14:41:18

有几种方法可以在Qt中创建PDF文档。你已经提到了其中的两个。我对QTextDocument方法提出了一些改进。您可以从QTextDocument格式的文本创建它,而不是手动编写HTML。

QString html =
"<div align=right>"
   "City, 11/11/2015"
"</div>"
"<div align=left>"
   "Sender Name<br>"
   "street 34/56A<br>"
   "121-43 city"
"</div>"
"<h1 align=center>DOCUMENT TITLE</h1>"
"<p align=justify>"
   "document content document content document content document content document content document content document content document content document content document content "
   "document content document content document content document content document content document content document content document content document content document content "
"</p>"
"<div align=right>sincerly</div>";

QTextDocument document;
document.setHtml(html);

QPrinter printer(QPrinter::PrinterResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setPaperSize(QPrinter::A4);
printer.setOutputFileName("/tmp/test.pdf");
printer.setPageMargins(QMarginsF(15, 15, 15, 15));

document.print(&printer);

警告:QTextDocument支持HTML4标记的limited subset

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33654060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档