ユーザがダイアログウィンドウ(文書のタイトル、送信者の名前と住所など)にデータを挿入した後、アプリケーションがこのユーザデータからpdfファイルを生成する必要があります。テンプレートからQtで印刷するためのPDF文書を作成する
PDFファイルは、レイアウトを定義しておく必要があり、このような何か:
私はQPdfWriter
でこれを実行しようとしましたが、PDF内のテキストを揃える問題を抱えています。ここに私のコードは次のとおりです。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();
}
日が左側にある、しかし:
- 私はさらに、テキストに問題がある - 別の場所に画家を「移動」する方法を、印刷することも送信者の名前、ドキュメントのタイトル、 、ページ内のドキュメントのコンテンツ(十分な数のペインタの方法がありますか?
- ドキュメントの内容非常に長くなります(2ページ以上に広がります) の
おかげ
EDIT
は、私はまた、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);
}
ありがとうございます。 3つのこと:1)ページ番号を取り除く方法? 3)ページ番号を、たとえば左または中央に移動できますか? 3)私はあなたのアプローチがページ区切りを自動的に処理することを知っています(古いページが終わると新しいページに行きます)。しかし、QTextCursorを使って同じことを達成する方法を知っていますか? –
@Brian Brown 1)文書にページがない場合は、現在のページ番号が各ページの下部に印刷されます。ページサイズが指定されている場合、ドキュメントのページが変更されます。したがって、ページ番号を取り除くには、ページサイズを設定する必要があります: 'document.setPageSize(printer.pageRect()。size());'。 2)ページ番号の位置がハードコードされているため、変更することはできません。 3) 'QTextDocument'は、ドキュメントがどのように作成されたかにかかわらず、ページを自動的に分割します。 – Meefte
ありがとうございます。あなたのアプローチを 'setHtml'メソッドで使用しました。しかし、QtextCursorと同様のクラスで同じ効果を達成する方法を知りたいのですが、Qtのドキュメントは少なくとも私にとってはこれでは不十分です。 –