PyQt5使用QPdfWriter方式寫pdf文件
阿新 • • 發佈:2019-01-22
在我之前的一篇部落格 中,詳細了講述了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_())
執行效果如圖所示: