Domanda

Ho seguente codice stampa:

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

Il risultato è diverso con QPrintPreviewDialog, PDF reso, uscita per le stampanti (HP LaserJet, PdfFactory, PDFCreator). La maggior parte del tempo il rettangolo risultante ha esaurito la carta. Cosa fare quindi l'output è simile a tutte le stampanti?

È stato utile?

Soluzione 2

Il codice di Qt ho rivisto assume 5% di carta in quanto è il margine. Nessuno si fida su margini della carta corretti.

Altri suggerimenti

Questo in realtà è stato chiesto qualche tempo fa, ma ho preso il codice dall'alto e mi è costato qualche ora per capire, cosa c'è di sbagliato con esso. In primo luogo, guardando il codice sorgente di Qt, non ho potuto trovare un posto che presuppone un margine di 5%. Qt rilegge i margini correttamente da Windows XP e ci si può fidare completamente i margini della pagina (Qt 4.5.3 con Windows XP).

Il codice contiene sopra due problemi: per la stampa di un paperrect, l'opzione fullpage deve essere impostata. Poi il paperRect viene stampato almeno l'anteprima correttamente. Naturalmente non su una stampante vera e propria, in quanto è al di fuori del pageRect. In generale, la stampa del paperRect non ha senso, come, se stampati correttamente, si trova esattamente sul confine di carta.

Il secondo problema principale deriva dalla stampa pageRect senza correggere l'origine. Se fullpage è disabilitato (default), quindi l'origine pageRect è all'origine paperRect quindi comprende i margini. Ma la stampa inizia alle QPoint (leftMargin, topMargin), quindi il margine si aggiunge due volte.

Per risolvere il problema, pageRect.moveTo (0,0) deve essere chiamato e poi le stampe pageRect piacevolmente in cui essa appartiene.

Tale stampanti diverse mostrano risultati diversi proviene da diversi margini dispositivo. Solo i dispositivi con 0-margine lavoreranno con il codice originale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top