我以下打印代码:

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正确读回的利润,你可以完全信任的页边距(QT 4.5.3与Windows XP)。

上面的代码包含两个问题:用于印刷paperrect,所述全页选项必须设置。然后paperRect打印正确的至少上的预览。当然不是真正的打印机,因为它是pageRect之外。 通常,打印paperRect是没有意义的,因为,如果正确地打印,它恰好位于纸张边界。

在第二个主要问题从印刷pageRect不修正原点茎。 如果全页被禁用(默认设置),则pageRect起源是在paperRect原点因此包括利润率。 但印刷开始于QPoint(LEFTMARGIN,TOPMARGIN),因此裕度添加两次。

要解决此问题,pageRect.moveTo(0,0)需要被调用,然后pageRect打印很好它属于

这不同的打印机显示不同的结果来自于不同的设备空间。只有具有0-余量设备将与原来的代码工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top