打印pageRect和paperRect问题

时间:2009-05-27 13:41:45

标签: qt printing qprinter

我有以下打印代码:

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 个答案:

答案 0 :(得分:3)

这是前段时间的问题,但是我从上面拿了代码,花了几个小时来弄清楚它有什么问题。 首先,看看Qt源代码,我找不到任何假定5%边际的地方。 Qt从Windows XP中正确读回边距,您可以完全信任页边距(使用Windows XP时为Qt 4.5.3)。

上面的代码包含两个问题:要打印paperrect,必须设置fullPage选项。然后至少在预览上正确打印paperRect。当然不是在真正的打印机上,因为它在pageRect之外。 通常,打印paperRect是没有意义的,因为如果正确打印,它就完全位于纸边框上。

第二个主要问题源于打印pageRect而不更正原点。 如果禁用了fullPage(默认),则pageRect原点位于paperRect原点,因此包括边距。 但是打印从QPoint(leftMargin,topMargin)开始,因此边距增加了两倍。

要解决此问题,需要调用pageRect.moveTo(0,0),然后pageRect会很好地打印它所属的位置。

不同的打印机显示不同的结果来自不同的设备边距。只有具有0余量的设备才能使用原始代码。

答案 1 :(得分:1)

我审核的Qt代码假设5%的纸张为保证金。没有人信任正确的纸张利润。