QTextDocument, QPdfWriter语言 - 如何缩放输出



我已经创建了一个QTextDocument,其中有一个表。现在我试图将其渲染成PDF格式使用QPdfWriter (Qt 5.2.1)。我是这样做的:

QPdfWriter pdfWriter(output);
QPainter painter(&pdfWriter);
doc->drawContents(&painter);

它可以工作,但问题是PDF格式的表格非常非常小。我该怎么做才能扩大规模呢?我的意思是放大整个文档,而不仅仅是这个表,因为我计划在文档中添加更多的内容。

使用当前Qt(>= 5.3),您只需要调用:QPdfWriter::setResolution(int dpi)

您可以使用QPdfWriter::setPageSizeMM()QPdfWriter::setPageSize()设置页面大小。为了测试这个想法,您可以在代码中添加pdfWriter.setPageSize(QPagedPaintDevice::A0);

答案是使用QPainter::scale(),所以在我的情况下:

QPdfWriter pdfWriter(output);
QPainter painter(&pdfWriter);
painter.scale(20.0, 20.0);
doc->drawContents(&painter);

这使得画家把所有的东西都画大20倍。

我仍然不知道为什么QPdfWriter把所有的东西都画得这么小,但是问题可以按照上面的方法解决。

我刚刚也被这个抓住了。当我调用QPdfWriterwidthMM()width()函数时,我弄清楚了发生了什么。宽度mm大约是200,这对于A4/Letter页面来说是合适的(一个合理的默认值),但是width返回大约为9600。我打电话给logicalDpiX(),结果是1200。

所以这表明QPdfWriter的逻辑单位是"点",默认情况下每英寸有1200个点。因此,你需要在自己的逻辑单元和"点"之间进行缩放。例如,如果你的逻辑单元是一个Point,那么你需要这样做:

QPdfWriter writer(filename);
int logicalDPIX=writer.logicalDpiX();
const int PointsPerInch=72;
QPainter painter;
painter.begin(&writer)
QTransform t;
float scaling=(float)logicalDPIX/PointsPerInch;  // 16.6
t.scale(scaling,scaling);
// do drawing with painter
painter.end()
painter.setTransform(t);

最新更新