Frage

Ich habe folgenden Druck Code:

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());
}

Das Ergebnis unterscheidet sich mit QPrintPreviewDialog, gerenderte PDF, die Ausgabe auf Drucker (HP LaserJet, PdfFactory, PDFCreator). Die meisten der Zeit, ist das resultierende Rechteck aus Papier. Was ist zu tun, um die Ausgabe auf alle Drucker ähnlich ist?

War es hilfreich?

Lösung 2

Der Qt Code, den ich überprüft übernimmt 5% Papier, wie es Spielraum ist. Keiner vertraut auf korrekte Papierränder.

Andere Tipps

Das ist wirklich wurde vor einiger Zeit gefragt, aber ich habe den Code von oben und es kostete mich ein paar Stunden, um herauszufinden, was mit ihm los ist. Zuerst wird in der Qt-Quellcode suchen, konnte ich keinen Platz finden, die eine Marge von 5% annimmt. Qt liest die Ränder korrekt von Windows XP zurück und Sie können die Seitenränder vollständig vertrauen (Qt 4.5.3 mit Windows XP).

Der obige Code enthält zwei Aspekte: zum einem paperrect Druck muss die blattgr Option eingestellt werden. Dann wird die paperRect richtig zumindest auf der Vorschau gedruckt. Natürlich nicht auf einem echten Drucker, da sie außerhalb des pageRect ist. Im Allgemeinen macht die paperRect Druck keinen Sinn, da, wenn es richtig gedruckt, es genau auf dem Papier Grenze liegt.

Die zweite große Problem ergibt sich aus pageRect Druck, ohne den Ursprung zu korrigieren. Wenn blattgr deaktiviert (default) ist, dann liegt der pageRect Ursprung am paperRect Ursprung umfasst somit die Ränder. Aber Druck beginnt bei QPoint (leftmargin, topmargin), so dass der Marge zweimal hinzugefügt wird.

Um das Problem zu beheben, muss pageRect.moveTo (0,0) aufgerufen wird und dann die pageRect druckt schön, wo es hingehört.

Die unterschiedliche Drucker unterschiedliche Ergebnisse zeigt, kommt aus verschiedenen Geräterand. Nur Geräte mit 0-Marge werden mit dem ursprünglichen Code arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top