最近需要用Qt输出pdf文件,参考了一些网友的使用方法后,终于正常输出文件并显示正常了。
下面是效果图:
总结如下经验:
1、Qt输出pdf文件非常简单,比C#要简单太多,只用到2个类QPdfWriter 和 QPainter。QPdfWriter 用于创建pdf,QPainter类既可以输出文本,也可以输出线条,可以设置文本字体和大小,线条也可以设置粗细,而且设置非常方便。
2、写完一页后,pWriter->newPage();又可以开始新的一页。
这里有2中方法:
1)是先提出数据,用一个数据类分开每页的数据,确定页数;
2)是一边循环一边判断,不创建专门数据类,在下批数据读入来后,再确定存在数据才创建新页。
其实2种方法我都用过,都可以的。如果数据简单,建议第一种方法,复杂数据,难以用一个类存放的,直接用第二种方法更简单。
3、关于排版问题
1)配合Adobe AI来做,所见即所得,非常方便。AI默认是72点每英寸,我们也需要把输出pdf改为72点每英寸,同时设置四边边距为0,跟AI里面一样。
pWriter->setResolution(72);
pWriter->setPageMargins(QMarginsF(0, 0, 0, 0));
2)修改ai里面的单位为像素px。
3)经过以上设置,ai和pdf的大小、边距就一模一样了,直接在ai中排版,然后读取坐标和大小到Qt中就完美了。
A4竖版的大小为595 * 842 点。
你看到上面图片的排版就是ai一次做出来的,直接读进Qt,没有任何调整过的,输出pdf后跟原版一模一样。
重点:
如果你设置分辨率300点每英寸,记得在ai中也要做出分辨率修改,不然对不上号的!