Nach Änderung der Windows-Anzeige auf 150% werden Seiteninhalte viel kleiner ausgedruckt

Alles rund um die Programmierung mit Qt
Antworten
Yogi
Beiträge: 2
Registriert: 19. Februar 2018 12:08

Nach Änderung der Windows-Anzeige auf 150% werden Seiteninhalte viel kleiner ausgedruckt

Beitrag von Yogi »

Ich erstelle mit Qt HTML-Seiten und drucke diese dann mit Hilfe von QTextDocument aus.
Dies funktioniert soweit problemlos, egal ob direkt auf einen Drucker ausgedruckt wird oder eine PDF-Datei mittels setOutputFormat(QPrinter::PdfFormat) erzeugt wird.

Ein Druckproblem tritt allerdings dann auf, wenn unter Windows die Anzeige von 100 auf 150 % eingestellt wird.
Dies hat zur Folge, dass im Ausdruck die HTML-Seiten viel kleiner erscheinen.

Für die Ausgabe in eine PDF-Datei konnte ich das Problem inzwischen beheben, in dem ich folgendes Attribut setze:
QApplication::setAttribute(Qt::AA_Use96Dpi);

Leider besteht das Problem für den Ausdruck auf einen Drucker aber immer noch.

Wenn ich in diesem Fall (Anzeige = 150%) den Skalierungsfaktor für eine Din A4 Seite von 1.0 auf 1.5 setze, sieht es auch wieder gut aus. Allerdings ist es mir noch nicht gelungen die eingestellte Windows-Anzeige abzufragen.

Hier mein relevanter Code:

Code: Alles auswählen

QPrinter printer;
QTextDocument txtDoc;
QPainter painter;

printer.setFullPage(true);
painter.begin(&printer);
painter.scale(scale, scale); // für A4 scale = 1.0
painter.translate(printer.paperRect().x(), printer.paperRect().y());
txtDoc.setHtml(css + html); // css und html sind vom Typ QString und enthält den entsprechenden Code und Inhalt
txtDoc.drawContents(&painter);
painter.end();
Hat jemand eine Idee, was ich tun kann, damit auch auf dem Drucker korrekt ausgedruckt wird (PDF ist ok)?
Am einfachsten wäre natürlich, wenn nur ein bestimmtes Attribut gesetzt werden muss.
Es wäre mir aber auch schon eine große Hilfe, wenn ich wüsste wie ich die eingestellte Windows-Anzeige abfragen kann.

Vielen Dank.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Nach Änderung der Windows-Anzeige auf 150% werden Seiteninhalte viel kleiner ausgedruckt

Beitrag von Christian81 »

Auch wenn ich keine direkte Lösung habe würde ich mir QPaintDevice mal genauer anschauen. Vor allem devicePixelRatioF(), logicalDpiX/Y() und physicalDpiX/Y(). Vielleicht hilft es weiter.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Yogi
Beiträge: 2
Registriert: 19. Februar 2018 12:08

Re: Nach Änderung der Windows-Anzeige auf 150% werden Seiteninhalte viel kleiner ausgedruckt

Beitrag von Yogi »

Vielen Dank für die Tipps.

Ich hatte es inzwischen mit QGuiApplication::primaryScreen()->logicalDotsPerInch() versucht.
Mit QPaintDevice::logicalDpiX() bzw. logicalDpiX() erhalte ich die gleichen Werte.

QPaintDevice::devicePixelRatioF() wäre ideal gewesen, aber leider erhalte ich für beide Winows-Einstellungen (100% und 150%) immer als Rückgabewert eine 1.
Zu diesem Problem habe ich folgende Seite gefunden:
https://bugreports.qt.io/browse/QTBUG-49465

Mit QPaintDevice::logicalDpiX() habe ich folgende Erfahrung gemacht:
Für die Windows-Einstellung 100%, erhalte ich den Wert 96 dpi.
Für 150% erhalte ich den Wert 144 dpi.

144 ist der 1,5 fache Wert von 96.
Somit kann ich painter.scale(..) entsprechend anpassen.

Für die Windows-Einstellung 125% ist der Ausdruck ebenfalls korrekt.
Selbst für das Querformat und andere Papierformate lässt sich so der Skalierungsfaktor korrekt anpassen.

Mein Frage wäre jetzt noch.
Kann ich immer so wie oben beschrieben vorgehen, also mit Hilfe von QPaintDevice::logicalDpiX(), unabhängig von der Hardware und dem Windowssystem?

Vielen Dank.
Antworten