我在X11(ubuntu linux)PDF打印上测试了这个方法,使用ScreenResolution打印机模式:
painter.begin(printer);
int log_w = 210;
int log_h = 297;
painter.setWindow(0, 0, log_w, log_h);
int phys_w = printer->width();
int phys_h = printer->height();
painter.setViewport(0, 0, phys_w, phys_h);
基本上,使用画家窗口以毫米为单位设置逻辑尺寸,并为画家的视口提供打印机的物理尺寸。
此行应在页面周围打印一个边框为 10 毫米的矩形:
painter.drawRect(10, 10, log_w - 20, log_h -20);
文本应该相应地工作。此代码应在矩形的左上角打印单词 Ok:
QFont font = painter.font();
font.setPointSize(10); //1 cm height
painter.setFont(font);
painter.drawText(10, 20, "Ok");
painter.end();
使用HighResolution打印模式,字体大小必须使用
font.setPixelSize(10); //1 cm height
并且必须将QPen 设置为painter:
QPen pen(Qt::black);
pen.setWidthF(0.2);
painter.setPen(pen);
painter.drawRect(10, 10, log_w - 20, log_h - 20);
关于使用setPixelSize 丢失设备依赖,我知道here 已声明:
可以将屏幕上显示的字符高度设置为
使用 setPixelSize() 指定数量的像素;但是使用
setPointSize() 具有类似的效果并提供设备独立性。
但我认为它仅指屏幕,因为声明了here:
在 QPrinter 设备上渲染文本时,重要的是要实现
当以磅为单位指定时,文本的大小与
为设备本身指定的分辨率。因此,它可能是
在将文本与
图形以确保它们的相对大小符合您的预期。