题
我以下打印代码:
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-余量设备将与原来的代码工作。
不隶属于 StackOverflow