Skip to content

Commit 2962280

Browse files
committed
init
0 parents  commit 2962280

File tree

5 files changed

+381
-0
lines changed

5 files changed

+381
-0
lines changed

QtLetter.pro

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
QT += core gui
2+
QT += printsupport
3+
4+
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
5+
6+
CONFIG += c++11
7+
8+
# You can make your code fail to compile if it uses deprecated APIs.
9+
# In order to do so, uncomment the following line.
10+
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
11+
12+
SOURCES += \
13+
main.cpp \
14+
mainwindow.cpp
15+
16+
HEADERS += \
17+
mainwindow.h
18+
19+
FORMS += \
20+
mainwindow.ui
21+
22+
# Default rules for deployment.
23+
qnx: target.path = /tmp/$${TARGET}/bin
24+
else: unix:!android: target.path = /opt/$${TARGET}/bin
25+
!isEmpty(target.path): INSTALLS += target

main.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include "mainwindow.h"
2+
3+
#include <QApplication>
4+
5+
int main(int argc, char *argv[])
6+
{
7+
QApplication a(argc, argv);
8+
MainWindow w;
9+
w.show();
10+
return a.exec();
11+
}

mainwindow.cpp

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
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+
}

mainwindow.h

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#ifndef MAINWINDOW_H
2+
#define MAINWINDOW_H
3+
4+
#include <QPrinter>
5+
6+
#include <QTextDocument>
7+
#include <QMainWindow>
8+
9+
QT_BEGIN_NAMESPACE
10+
namespace Ui { class MainWindow; }
11+
QT_END_NAMESPACE
12+
13+
class MainWindow : public QMainWindow
14+
{
15+
Q_OBJECT
16+
17+
public:
18+
MainWindow(QWidget *parent = nullptr);
19+
~MainWindow();
20+
21+
private slots:
22+
void doPaint(QPrinter* );
23+
void on_pb1_clicked();
24+
void on_pb4_clicked();
25+
26+
private:
27+
Ui::MainWindow *ui;
28+
QTextDocument tdAddress;
29+
QTextDocument tdBody;
30+
QTextDocument tdFoot;
31+
QPrinter p{QPrinter::PrinterMode::HighResolution};
32+
33+
};
34+
#endif // MAINWINDOW_H

mainwindow.ui

+165
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>MainWindow</class>
4+
<widget class="QMainWindow" name="MainWindow">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>978</width>
10+
<height>803</height>
11+
</rect>
12+
</property>
13+
<property name="sizePolicy">
14+
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
15+
<horstretch>0</horstretch>
16+
<verstretch>0</verstretch>
17+
</sizepolicy>
18+
</property>
19+
<property name="windowTitle">
20+
<string>MainWindow</string>
21+
</property>
22+
<widget class="QWidget" name="centralwidget">
23+
<layout class="QVBoxLayout" name="verticalLayout_2">
24+
<item>
25+
<layout class="QHBoxLayout" name="horizontalLayout">
26+
<item>
27+
<widget class="QPushButton" name="pb1">
28+
<property name="text">
29+
<string>(re-)&amp;Render</string>
30+
</property>
31+
</widget>
32+
</item>
33+
<item>
34+
<widget class="QPushButton" name="pb2">
35+
<property name="text">
36+
<string>PB&amp;2</string>
37+
</property>
38+
</widget>
39+
</item>
40+
<item>
41+
<widget class="QPushButton" name="pb3">
42+
<property name="text">
43+
<string>PB&amp;3</string>
44+
</property>
45+
</widget>
46+
</item>
47+
<item>
48+
<widget class="QPushButton" name="pb4">
49+
<property name="text">
50+
<string>&amp;Pdf</string>
51+
</property>
52+
</widget>
53+
</item>
54+
</layout>
55+
</item>
56+
<item>
57+
<widget class="QSplitter" name="splitter">
58+
<property name="midLineWidth">
59+
<number>2</number>
60+
</property>
61+
<property name="orientation">
62+
<enum>Qt::Horizontal</enum>
63+
</property>
64+
<property name="handleWidth">
65+
<number>12</number>
66+
</property>
67+
<widget class="QWidget" name="layoutWidget">
68+
<layout class="QVBoxLayout" name="verticalLayout">
69+
<property name="leftMargin">
70+
<number>2</number>
71+
</property>
72+
<property name="topMargin">
73+
<number>2</number>
74+
</property>
75+
<property name="rightMargin">
76+
<number>2</number>
77+
</property>
78+
<property name="bottomMargin">
79+
<number>2</number>
80+
</property>
81+
<item>
82+
<widget class="QLabel" name="label">
83+
<property name="text">
84+
<string>Adresse</string>
85+
</property>
86+
<property name="buddy">
87+
<cstring>txtAdresse</cstring>
88+
</property>
89+
</widget>
90+
</item>
91+
<item>
92+
<widget class="QPlainTextEdit" name="txtAdresse"/>
93+
</item>
94+
<item>
95+
<widget class="QLabel" name="label_2">
96+
<property name="text">
97+
<string>Text</string>
98+
</property>
99+
<property name="buddy">
100+
<cstring>txtBody</cstring>
101+
</property>
102+
</widget>
103+
</item>
104+
<item>
105+
<widget class="QPlainTextEdit" name="txtBody"/>
106+
</item>
107+
<item>
108+
<widget class="QLabel" name="label_3">
109+
<property name="text">
110+
<string>Fusszeile</string>
111+
</property>
112+
<property name="buddy">
113+
<cstring>txtFusszeile</cstring>
114+
</property>
115+
</widget>
116+
</item>
117+
<item>
118+
<widget class="QPlainTextEdit" name="txtFusszeile"/>
119+
</item>
120+
</layout>
121+
</widget>
122+
<widget class="QPrintPreviewWidget" name="ppW" native="true">
123+
<property name="enabled">
124+
<bool>true</bool>
125+
</property>
126+
<property name="sizePolicy">
127+
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
128+
<horstretch>2</horstretch>
129+
<verstretch>0</verstretch>
130+
</sizepolicy>
131+
</property>
132+
<property name="minimumSize">
133+
<size>
134+
<width>2</width>
135+
<height>0</height>
136+
</size>
137+
</property>
138+
</widget>
139+
</widget>
140+
</item>
141+
</layout>
142+
</widget>
143+
<widget class="QMenuBar" name="menubar">
144+
<property name="geometry">
145+
<rect>
146+
<x>0</x>
147+
<y>0</y>
148+
<width>978</width>
149+
<height>26</height>
150+
</rect>
151+
</property>
152+
</widget>
153+
<widget class="QStatusBar" name="statusbar"/>
154+
</widget>
155+
<customwidgets>
156+
<customwidget>
157+
<class>QPrintPreviewWidget</class>
158+
<extends>QWidget</extends>
159+
<header location="global">qprintpreviewwidget.h</header>
160+
<container>1</container>
161+
</customwidget>
162+
</customwidgets>
163+
<resources/>
164+
<connections/>
165+
</ui>

0 commit comments

Comments
 (0)