1. 程式人生 > >PyQt5使用QPdfWriter方式寫pdf文件

PyQt5使用QPdfWriter方式寫pdf文件

    在我之前的一篇部落格 中,詳細了講述了Qt5中使用QPdfWrite而不是使用QPrinter進行pdf檔案輸出的功能,這裡補充一篇只是此功能移植到Python下的使用而已。
直接上程式碼:

from PyQt5.QtCore import (QIODevice, QFile, Qt, QMarginsF, QRect)
from PyQt5.QtGui import (QPagedPaintDevice, QPdfWriter, QPainter,
    QFont)
from PyQt5.QtWidgets import QWidget,QApplication

class
PdfWrite(QWidget):
"""docstring for PdfWrite""" def __init__(self, *arg): super(PdfWrite, self).__init__(*arg) def writePdf(self, name): pdfFile = QFile(name) #開啟要寫入的pdf檔案 pdfFile.open(QIODevice.WriteOnly) #建立pdf寫入器 pPdfWriter = QPdfWriter(pdfFile) #設定紙張為A4
pPdfWriter.setPageSize(QPagedPaintDevice.A4) #設定紙張的解析度為300,因此其畫素為3508X2479 pPdfWriter.setResolution(300) pPdfWriter.setPageMargins(QMarginsF(60, 60, 60, 60)) pPdfPainter = QPainter(pPdfWriter) # 標題上邊留白 iTop = 100 #文字寬度2100 iContentWidth = 2100
# 標題,22號字 font = QFont() font.setFamily("simhei.ttf") fontSize = 22 font.setPointSize(fontSize) pPdfPainter.setFont(font) pPdfPainter.drawText(QRect(0, iTop, iContentWidth, 90), Qt.AlignHCenter, "我是標題我驕傲") # 內容,16號字,左對齊 fontSize = 16 font.setPointSize(fontSize) pPdfPainter.setFont(font) iTop += 90 pPdfPainter.drawText(QRect(0, iTop, iContentWidth, 60), Qt.AlignLeft, "1、目錄一") iTop += 90 # 左側縮排2字元 iLeft = 120 pPdfPainter.drawText(QRect(iLeft, iTop, iContentWidth - iLeft, 60), Qt.AlignLeft, "我的目錄一的內容。") iTop += 90 pPdfPainter.drawText(QRect(0, iTop, iContentWidth, 60), Qt.AlignLeft, "2、目錄二") iTop += 90 pPdfPainter.drawText(QRect(iLeft, iTop, iContentWidth - iLeft, 60), Qt.AlignLeft, "我的目錄一的內容") pPdfPainter.end() pdfFile.close() if __name__ == '__main__': import sys from PyQt5.QtWidgets import QFileDialog app = QApplication(sys.argv) pWrite = PdfWrite() pWrite.show() name = QFileDialog.getSaveFileName(None, "Save File", "123.pdf", "*.pdf") if name[0]: print(name[0]) pWrite.writePdf(name[0]) else: pWrite.close() sys.exit(app.exec_())

執行效果如圖所示:
這裡寫圖片描述