|
| 1 | +#include <QDebug> |
| 2 | +#include <QPrinterInfo> |
| 3 | +#include <QPainter> |
| 4 | +#include <QTextStream> |
| 5 | + |
| 6 | +#include "mainwindow.h" |
| 7 | +#include "ui_mainwindow.h" |
| 8 | + |
| 9 | +double ptFromMm(double mm) { |
| 10 | + return mm *2.83465; |
| 11 | +} |
| 12 | +double mmFromPt(double pt) { |
| 13 | + return pt *0.35278; |
| 14 | +} |
| 15 | + |
| 16 | +void printPrinterInfo(QPrinter& p) |
| 17 | +{ |
| 18 | + qInfo().noquote() << (p.printerName().isEmpty() ? "<no name>" : p.printerName()); |
| 19 | + qInfo() << "Layout: " << p.pageLayout(); |
| 20 | + qInfo() << "Layout->fRPt " << p.pageLayout().fullRectPoints(); |
| 21 | + qInfo() << "pageSizeMM: " << p.pageSizeMM(); |
| 22 | + qInfo() << "pageSize: " << (0 == p.pageSize() ? "A4" : "not A4"); |
| 23 | + qInfo() << "pageRect(px, mm, pt) " << p.pageRect() << p.pageRect(QPrinter::Millimeter) << p.pageRect(QPrinter::Point); |
| 24 | + qInfo() << "paperRect(px)" << p.paperRect(); |
| 25 | + qInfo() << "fullPageMode " << (p.fullPage() ? "full page mode" : "NOT full page mode"); |
| 26 | + qInfo().noquote() << "resolution " << p.resolution() << "\n"; |
| 27 | +} |
| 28 | + |
| 29 | +void setupPrinter(QPrinter& p) |
| 30 | +{ |
| 31 | + p.setOutputFormat(QPrinter::PdfFormat); |
| 32 | + // Normbrief |
| 33 | + p.setFullPage(false); |
| 34 | + QMarginsF marg(25, 16.9, 10, 16.9); |
| 35 | + p.setPageMargins(marg, QPageLayout::Millimeter); |
| 36 | + printPrinterInfo(p); |
| 37 | +} |
| 38 | + |
| 39 | + |
| 40 | +MainWindow::MainWindow(QWidget *parent) |
| 41 | + : QMainWindow(parent) |
| 42 | + , ui(new Ui::MainWindow) |
| 43 | +{ |
| 44 | + ui->setupUi(this); |
| 45 | + connect(ui->ppW, SIGNAL(paintRequested(QPrinter*)), SLOT(doPaint(QPrinter*))); |
| 46 | + ui->txtAdresse->setPlainText("<html><head></head><body style='font-family:Verdana; font-size:10pt'>" |
| 47 | + "<table width=100% border=1 cellspacing=0 border-collapse:collapse;><tr><td>" |
| 48 | + "<small>Absender Adresse Abs-Platz 9, 62143 Absstadt<p></small>" |
| 49 | + "An<p>Hans Empfänger<br>Sesamstraße 42<p><big>31234</big> <b>EmpfStadt<b>" |
| 50 | + "</td></tr></table>" |
| 51 | + "</body></html>"); |
| 52 | + ui->txtBody->setPlainText("<hmtl><head></head><body style='font-family:Verdana; font-size:10pt;'>" |
| 53 | + "<table width=100% border=1 cellspacing=0 border-collapse:collapse;><tr><td>" |
| 54 | + "Lieber Adalbert,<p style='text-align:justify;'>" |
| 55 | + "herzlichen Dank bla bla blabla blabal bla bla blabla blabalbla bla blabla blabalbla bla blabla blabal" |
| 56 | + "<p style='text-align:justify;'>bla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabal" |
| 57 | + "<p align=justify>bla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabalbla bla blabla blabal" |
| 58 | + "<br><p>Mit freundlichen Grüßen</p>" |
| 59 | + "<p> Holger Mairon</p>" |
| 60 | + "<br><small>Job comment of signer</small></p>" |
| 61 | + "</td></tr></table></body></html>"); |
| 62 | + ui->txtFusszeile->setPlainText("<hmtl><head></head><body style='font-family:Verdana; font-size:6pt'>" |
| 63 | + "<table width=100% border=1 cellspacing=0 border-collapse:collapse;>" |
| 64 | + "<tr><td width=33% style='text-align:left'><small>Geschäftsführer: Hugo Hurtig, Julia Rüstig, Eduard Montabaur</small></td>" |
| 65 | + "<td width=33% style='text-align:left'><small>Eine Bank Frankfurt<br>IBAN 12939 39943 22030 403<br>BIC xxx-dxx-xx</small></td>" |
| 66 | + "<td style='text-align:left'><small>Handelsregister Mannheim<br>HSB Eintrag xxxx.xxxx.xxxx</small></td>" |
| 67 | + "</tr></table></body></html>"); |
| 68 | + |
| 69 | + setupPrinter(p); |
| 70 | +} |
| 71 | + |
| 72 | +MainWindow::~MainWindow() |
| 73 | +{ |
| 74 | + delete ui; |
| 75 | +} |
| 76 | + |
| 77 | +void MainWindow::doPaint(QPrinter* p) |
| 78 | +{ |
| 79 | + QPainter painter; |
| 80 | + printPrinterInfo(*p); |
| 81 | + painter.begin(p); |
| 82 | + QPageLayout lay = p->pageLayout(); |
| 83 | + double leftMg =lay.marginsPoints().left(); |
| 84 | + double rightMg =lay.marginsPoints().right(); |
| 85 | +// double top =lay.marginsPoints().top(); |
| 86 | + double bottomMg = lay.marginsPoints().bottom(); |
| 87 | + qInfo() << "Marings (l, r):() " << leftMg << ", " << rightMg << ")"; |
| 88 | + //////////////////////////////////////// |
| 89 | + painter.setWindow(lay.fullRectPoints()); |
| 90 | + //////////////////////////////////////// |
| 91 | + |
| 92 | + // top / bottom |
| 93 | + painter.drawLine(QPointF(0., 0.), QPointF(15, 0.)); |
| 94 | + painter.drawLine(QPointF(0., lay.fullRectPoints().height()), QPointF(15., lay.fullRectPoints().height())); |
| 95 | + |
| 96 | + // Falzmarken, Lochmarke |
| 97 | + double pos =ptFromMm(105. ); |
| 98 | + painter.drawLine(QPointF(0., pos), QPointF(10., pos)); |
| 99 | + pos =ptFromMm(210.); |
| 100 | + painter.drawLine(QPointF(0., pos), QPointF(10., pos)); |
| 101 | + pos =ptFromMm(148.5); |
| 102 | + painter.drawLine(QPointF(0., pos), QPointF(15., pos)); |
| 103 | + |
| 104 | + painter.save(); |
| 105 | + painter.translate(QPointF(leftMg, ptFromMm(45))); |
| 106 | + tdAddress.drawContents(&painter); |
| 107 | + painter.restore(); |
| 108 | + |
| 109 | + painter.save(); |
| 110 | + painter.translate(QPointF(leftMg, ptFromMm(105))); |
| 111 | + double textWidth = lay.fullRectPoints().width()-leftMg-rightMg; |
| 112 | + qInfo() << "TextWidth: " << textWidth; |
| 113 | + tdBody.setTextWidth(textWidth); |
| 114 | + tdBody.drawContents(&painter); |
| 115 | + painter.restore(); |
| 116 | + |
| 117 | + tdFoot.setTextWidth(textWidth); |
| 118 | + double footerHeight = tdFoot.size().height(); |
| 119 | + double footerStartY = lay.fullRectPoints().height()-bottomMg-footerHeight; |
| 120 | + painter.translate(QPointF(leftMg, footerStartY)); |
| 121 | + tdFoot.drawContents(&painter); |
| 122 | + |
| 123 | + painter.end(); |
| 124 | +} |
| 125 | + |
| 126 | +void MainWindow::on_pb1_clicked() |
| 127 | +{ |
| 128 | + tdAddress.setHtml(ui->txtAdresse->toPlainText()); |
| 129 | + tdBody.setHtml(ui->txtBody->toPlainText()); |
| 130 | + tdFoot.setHtml(ui->txtFusszeile->toPlainText()); |
| 131 | + ui->ppW->updatePreview(); |
| 132 | + |
| 133 | + qInfo() << ui->txtAdresse->toPlainText(); |
| 134 | + qInfo() << ui->txtBody->toPlainText(); |
| 135 | + qInfo() << ui->txtFusszeile->toPlainText(); |
| 136 | +} |
| 137 | + |
| 138 | +void MainWindow::on_pb4_clicked() |
| 139 | +{ |
| 140 | + QPrinter writer((QPrinterInfo)p); // does not work as expected |
| 141 | + setupPrinter(writer); |
| 142 | + printPrinterInfo(writer); |
| 143 | + //writer.setPageMargins(0, 0, 0, 0, QPrinter::Point); |
| 144 | + writer.setOutputFileName("out.pdf"); |
| 145 | + doPaint(&writer); |
| 146 | +} |
0 commit comments