pdf生成器QPdfWriter
现在越来越多的资料以pdf文档的形式进行保存,PySide可以将QPainter绘制的图形、文字和图像等转换成 pdl文档。
转换成pdf文档的类是QPdfWriter.它继承自QObject和 QPagedPaintDevice。用QPdfWriter 创建实例对象的方法如下所示。
from PySide6.QtGui import QPdfWriter
QPdfWriter(device: PySide6.QtCore.QIODevice)-> None
QPdfWriter(filename: str)-> None
pdf文档生成器QPdfWriter 的常用方法
pdf 文档生成器QPdfWriter的常用方法如表所示。
主要方法是用newPage()方法生成新页;
用setPageSize(pageSize:Union[QPageSize,QSize,QPageSize.PageSizeld])方法设置页面尺寸;
用setPageOrientation(QPageLayout.Orientation)友法设置文档的方向(横向或纵向);
用setPageLayout(pageLayout:QPageLayout)方法设置布局(纸张尺寸、页边距和文档方向);
用setPdfVersion(version)方法设置pdf文档的版本,参数version可取 QPdfWriter.PdfVersion_1_4,QPdfWriter,PdfVersion_A1b 或 QPd[Writer.PdfVersion_I_6.对应的值分别是0、1、2。
QPdfWriter的方法及参数类型 | 返回值的类型 | 说 明 |
---|---|---|
newPage() | bool | 生成新页 |
setCreator(creator:str) | None | 设置pdi文档的创建者 |
creator() | Str | 获取创建者 |
setPdfVersion(version:QPagedPaintDevice.PdfVersion) | None | 设置版本号 |
setResolution(resolution:int) | None | 设置分辨率(单位是dpi) |
resolution() | int | 获取分辨率 |
setTitle(title: str) | None | 设置pdf文档标题 |
tirle() | Str | 获取标题 |
setPageLayout(pageLayout:QPageLayout) | bool | 设置布局 |
pageLayout() | QPageLayout | 获取布局 |
setPageMargins(margins: Union[QMarginsF,QMargins],units: QPageLayout.Unit=QPageLayout.Millimeter) | bool | 设置页边距 |
setPageOrientation(QPageLayout.Orientation) | bool | 设置文档方向 |
setPageRanges(ranges:QPageRanges) | None | 设置页数范围 |
pageRanges() | QPageRanges | 获取页数范围 |
setPageSize(pageSize: Union[QPageSize,QSize,QPageSize.PageSizeId]) | bool | 设置页面尺寸 |
pdf文档生成器QPdfWriter 的应用实例
下面的程序创建3页pdf文档,每页中用QPainter绘制一个五角星。
import sys
from PySide6.QtWidgets import QApplication,QWidget,QPushButton
from PySide6.QtGui import QPainter,QPageSize,QPdfWriter,QPagedPaintDevice
from PySide6.QtCore import QPointF
from math import sin,cos,pi
class NyWidget(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
btn_printer=QPushButton('Pdf 打印',self)
btn_printer.clicked.connect(self.btn_printer_clicked)# 信号与槽连接
def btn_printer_clicked(self): # 槽函数
pdfWriter=QPdfWriter(r'C:\Users\Hi\Desktop/mystrars.pdf')# 创建 pdf 文档生成器,设置文件名
pageSize=QPageSize(QPageSize.A4)# 纸张尺寸
pdfWriter.setPageSize(pageSize)# 设置纸张尺寸
pdfWriter.setPdfVersion(QPagedPaintDevice.PdfVersion.PdfVersion_1_6)# 设置版本号
painter=QPainter()
if painter.begin(pdfWriter):
size=pageSize.size(QPageSize.Unit.Millimeter)
x=size.width()* 20 # 绘图区中心x坐标
y=size.height()* 20 # 绘图区中心y坐标
r=min(x / 2,y / 2)# 五角星的外接圆半径
p1=QPointF(r * cos(-90 * pi / 180)+ x,r * sin(-90 * pi / 180)+ y)
p2=QPointF(r * cos(-18 * pi / 180)+ x,r * sin(-18 * pi / 180)+ y)
p3=QPointF(r * cos(54 * pi / 180)+ x,r * sin(54 * pi / 180)+ y)
p4=QPointF(r * cos(126 * pi / 180)+ x,r * sin(126 * pi / 180)+ y)
p5=QPointF(r * cos(198 * pi / 180)+ x,r * sin(198 * pi / 180)+ y)
pageCopies=3 # 页数for
for i in range(1,pageCopies + 1):
painter.drawPolyline([p1,p3,p5,p2,p4,p1])# 绘制五角星
print("正在打印第{}页,共{}页.".format(i,pageCopies))
if i !=pageCopies:
pdfWriter.newPage()
painter.end()
if __name__=='__main__':
app=QApplication(sys.argv)
win=NyWidget()
win.show()
sys.exit(app.exec())