73-输入和显示-打印-pdf生成器QPdfWriter

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())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值