Question

Je suit le code d'impression:

void Print(QPrinter *printer)
{
    QPainter q(printer);
    q.setRenderHint(QPainter::HighQualityAntialiasing, true);

    q.setPen(QPen(QColor("red")));
    q.drawRect(printer->pageRect());
    q.drawLine(printer->pageRect().topRight(), printer->pageRect().bottomLeft());

    q.setPen(QPen(QColor("blue")));
    q.drawRect(printer->paperRect());
    q.drawLine(printer->paperRect().topRight(), printer->paperRect().bottomLeft());
}

Le résultat est différent avec QPrintPreviewDialog, PDF rendu, la sortie des imprimantes (HP LaserJet, PdfFactory, PdfCreator). La plupart du temps le rectangle résultant est de papier. Que faire si la sortie est similaire à toutes les imprimantes?

Était-ce utile?

La solution 2

Le code Qt je suppose 5% revue de papier comme il est la marge. Personne ne fait confiance sur les marges de papier correct.

Autres conseils

Cela a été demandé vraiment il y a quelque temps, mais je pris le code d'en haut et cela m'a coûté quelques heures pour comprendre, quel est le problème avec elle. Tout d'abord, en regardant le code source Qt, je ne pouvais pas trouver un endroit qui suppose une marge de 5%. Qt relit les marges correctement à partir de Windows XP et vous pouvez complètement confiance aux marges de la page (Qt 4.5.3 avec Windows XP).

Le code ci-dessus contient deux questions: pour l'impression d'une paperrect, l'option FullPage doit être réglée. Ensuite, le paperRect est imprimé au moins correctement sur l'aperçu. Bien sûr que non sur une imprimante réelle, car il est en dehors du pageRect. En général, l'impression du paperRect n'a pas de sens, comme, si elle est correctement imprimée, il se trouve exactement à la frontière de papier.

La deuxième grande question découle de l'impression pageRect sans corriger l'origine. Si FullPage est désactivé (par défaut), l'origine pageRect est à l'origine de paperRect comprend donc les marges. Mais l'impression commence à QPoint (leftMargin, TopMargin), de sorte que la marge est ajoutée deux fois.

Pour résoudre le problème, pageRect.moveTo (0,0) doit être appelée, puis les imprime pageRect bien où il appartient.

que les différentes imprimantes montrent des résultats différents provient de différentes marges de l'appareil. Seuls les appareils avec 0 marge travaillera avec le code d'origine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top