我有以下打印代码:
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)不同。大多数情况下,生成的矩形缺纸。怎么办输出类似于所有打印机?
答案 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%的纸张为保证金。没有人信任正确的纸张利润。