1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# Python 2.7
import sys, os
import codecs
from PyQt4 import QtCore, QtGui
app = QtGui.QApplication(sys.argv)
# chargement du texte html dans le QTextDocument 'doc'
nf = u"test.html"
f = codecs.open(nf, 'r', 'utf-8')
content = f.read()
f.close()
doc = QtGui.QTextDocument()
doc.setHtml(content)
fichierpdf = "test.pdf"
printer = QtGui.QPrinter()
printer.setPaperSize(QtGui.QPrinter.A4)
printer.setOrientation(QtGui.QPrinter.Portrait)
printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
printer.setOutputFileName(fichierpdf)
# pour convertir des mm en pixels en utilisant la résolution
resolution = printer.resolution()
mm2px = lambda mm: int(mm/25.4*resolution)
MargeGauche = mm2px(30)
MargeHaute = mm2px(40)
MargeDroite = mm2px(10)
MargeBasse = mm2px(40)
printer.setPageMargins(MargeGauche, MargeHaute, MargeDroite, MargeBasse,
QtGui.QPrinter.DevicePixel)
innerRect = printer.pageRect()
sizeF = QtCore.QSizeF(innerRect.size().width(), innerRect.size().height())
doc.setPageSize(sizeF)
contentRect = QtCore.QRect(QtCore.QPoint(0,0), doc.size().toSize())
currentRect = QtCore.QRect(QtCore.QPoint(0,0), innerRect.size())
painter = QtGui.QPainter(printer)
count = 0
painter.save()
while currentRect.intersects(contentRect):
doc.drawContents(painter, QtCore.QRectF(currentRect))
count += 1
currentRect.translate(0, currentRect.height())
painter.restore()
# impression en-tête (0,0 => coin haut et gauche de la zone d'impression)
painter.drawText(0, -mm2px(10), u"Header")
# impression bas de page (0,0 => coin haut et gauche de la zone d'impression)
painter.drawText(0, printer.pageRect().height() + mm2px(10), u"Footer %d" % count)
painter.save()
painter.translate(0, -currentRect.height() * count)
if currentRect.intersects(contentRect):
printer.newPage()
painter.restore()
painter.end()
# affichage du pdf par le viewer pdf par défaut de l'OS
if os.path.exists(fichierpdf):
try:
os.startfile(fichierpdf) # solution pour Windows
except:
os.system('xdg-open ' + fichierpdf)# solution pour les Linux récents |
Partager