Я пишу приложение, когда пользователь вставляет данные в диалоговое окно (название документа, имя и адрес отправителя и т.д.), а затем мое приложение должно генерировать 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, находится слева, но:
- У меня есть проблемы с дальнейшим текстом - как "переместить" художника
в разных местах, чтобы печатать также имя отправителя, название документа,
и содержимое документа внутри страницы (это метод
translate
для художника, или это можно сделать проще?) - Я не знаю, как обрабатывать разрывы страниц, в случае, если содержимое документа будет очень длинным (будет распространяться на 2 и более страницах).
Спасибо
ИЗМЕНИТЬ
Я также пробовал подход QTextDocument
, но его трудно было записать на любой документ, причем почти любой пример доступен в Интернете. Я пришел только с этим:
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);
}