質問

私は印刷コードを次ています:

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-余裕を持つデバイスのみが、元のコードで動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top