Problem mit Druckrändern (nur unter Windows)

Alles rund um die Programmierung mit Qt
Antworten
RobRoy1304
Beiträge: 47
Registriert: 9. Juli 2009 10:56

Problem mit Druckrändern (nur unter Windows)

Beitrag von RobRoy1304 »

Hallo Leute,

ich habe ein seltsames Phänomen auf einmal bei der Druckfunktion meines Programmes...

Zur Vorgeschichte:
ich benutzte Qt 4.8 und die Druckfunktion meines Programmes funktionierte bei Linux und Windows einwandfrei. Dann deinstallierte ich diese Version um Qt 5.4.1 zu installieren. Dabei merkte
ich erst, das Qt 5.4 nicht in den normalen Paketverwaltung (Abhängigkeiten des Deb-Paket meines Programmes unter Ubuntu) vorhanden ist und das Archiv meines Programm unter Windows von ca. 7 MB
auf 20 MB (mit allen alle benötigten Dll's) angewachsen ist. Beides doof, also entschloss ich mich wieden auf Qt 4.8 zurückzugehen.

Nun habe ich folgendes Problem:
unter Linux läuft alles wunderbar. Aber unter Windows funktioniert seltsamerweise der unveränderte code der Druckfunktion nicht mehr so wie er soll. Bei der Druckansicht werden die Ränder so wie
voreingestellt bzw. nach user-Änderungen korrekt angezeigt. Soweit so gut, aber wenn ich dann Drucke, egal ob PDF oder physisch (ich habe mehrere Drucker probiert, zu Haus, auf Arbeit...) wird der
Druck der Tabellen etc. zu weit rechts gedruckt. So weit das rechts nicht alles gedruckt wird, sprich es fehlt rechts was.

Ich kann mir das Ganze nicht erklären und wollte mal fragen ob jemand schon einmal ein ähnliches Problem hatte. Code kann ich gerne bei Bedarf posten. Auch bei der Version mit Qt 5.4.1 kompiliert,
trat der Fehler unter Windows auf.

Vielen Dank

RobRoy


http://www.robert.ewert.de.vu
Volker75
Beiträge: 59
Registriert: 8. April 2009 21:04

Re: Problem mit Druckrändern (nur unter Windows)

Beitrag von Volker75 »

Hallo

zur Größe unter Windows:
Ging mir damals genau so. Das Problem sind vorallem die ICU-dll-Dateien. Gab damals in der Qt-Maillingliste auch Bedenken, man wollte darauf aus Kompatibilitätsgründen jedoch nicht verzichten. Ich hatte daher in den sauren Apfel gebissen und die größeren Archive in Kauf genommen.
Gerade lese ich, dass es wohl seit Qt 5.3 wohl auch ohne geht. Man muss dafür aber Qt wohl selbst compilieren und den ICU-Support ausgeschaltet haben. (Ich habe es selbst nicht ausprobiert.)
Siehe:
http://doc.qt.io/qt-5/windows-requirements.html

Zum Druckproblem:
Das Problem habe ich auch. Genau genommen wird die Seite immer zu klein eingerichtet, sodass überall viel zu große Ränder sind. Den Fehler taucht seit Jahren etliche male im Qt Bugtracker auf, aber wurde bisher nicht gelöst :-(
Zuletzt hatte ich mit Qt 5.4.1 getestet und noch immer das Problem. Qt 5.4.2 habe ich nicht probiert (Es gibt mir aber etwas Hoffnung, da laut changelog jetzt wohl die Seitengröße richtig ausgelesen wird) . Ich wollte jetzt noch die paar Tage bis Qt 5.5 warten und hoffen, dass es dort gelöst ist.
Siehe z.B.:
https://bugreports.qt.io/browse/QTBUG-25380
https://bugreports.qt.io/browse/QTBUG-24371

Gruß
Volker
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Problem mit Druckrändern (nur unter Windows)

Beitrag von odt »

Hallo Mitenand

Das Druckproblem habe ich mit Qt 5.3 unter Windows ebenfalls. Es scheint abhängig vom Drucker zu sein. Ich konnte es lösen (respektive zumindest mildern, einige Xerox-Drucker sind unberechenbar), indem ich einen Offset berechne. Hier der relevante Code-Auszug:

Code: Alles auswählen

	QPrinter printer( settings->printerInfo(), QPrinter::HighResolution );
	_printer->setPageSize( style()->pageSize() );
	_printer->setOrientation( style()->orientation() );
	_printer->setFullPage( false );
	QRect initialPageRect = _printer->pageRect();
	QPointF offsetpixel( initialPageRect.left(), initialPageRect.top() );
	_offset = offsetpixel;
	if( _printer->paintEngine()->type() == QPaintEngine::Pdf ){
		_offset = QPointF( 0, 0 );
	}
	_printer->setFullPage( true );
	if( !painter.begin( _printer ) ){
		throw Exception( "Failed to begin painting on printer." );
	}
	painter.translate( -_offset );
ODT Informatik GmbH, Reto Tschofenig
Antworten