質問
私は印刷コードを次ています:
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());
}
結果はQPrintPreviewDialog、レンダリングされたPDF、プリンタへの出力(HPのLaserJet、PdfFactory、のPDFCreator)と異なっています。ほとんどの時間は、得られた矩形は、用紙切れです。出力は、すべてのプリンタに似ているので、何をする?
解決 2
私は見直さQtのコードは、紙の5%を想定しています。正しい用紙の余白上の誰もが信頼ます。
他のヒント
これは実際にいくつかの時間前に頼まれたが、私は上記のコードを取り、それで間違っているか、何を把握するために私にいくつかの時間を要しました。 まず、Qtのソースコードを見て、私は、5%のマージンを想定して任意の場所を見つけることができませんでした。 QtはWindows XPから正しく余白をリードバックして、あなたは完全にページ余白(Windows XPとのQt 4.5.3)を信頼することができます。
上記のコードは、二つの問題が含まれていますpaperrectを印刷するために、フルページのオプションを設定する必要があります。その後paperRectは少なくともプレビューで正しく印刷されます。もちろんそうではない本当のプリンタで、それはpageRect外であるとして。 正しく印刷ならば、それはまさに紙の国境に位置し、として一般的に、paperRectを印刷することは、意味がありません。
第二の主要な問題は、原点を補正することなく印刷pageRectに由来します。 フルページ(デフォルト)無効になっている場合、pageRect原点は、このようにpaperRectの原点にある余白が含まれています。 しかし、印刷がのQPoint(LEFTMARGIN、TOPMARGIN)から始まり、そのマージンを二回追加されます。
問題を解決するには、pageRect.moveTo(0,0)は、それが属するうまくpageRectプリントを呼び出す必要があると。
別のプリンタは異なる結果を示すことは、さまざまなデバイスの余白から来ています。 0-余裕を持つデバイスのみが、元のコードで動作します。