Ich weiß, das ist eine alte Frage. In meinem Fall verwende ich Reportlab.
Die Blattabmessungen werden in Punkten und nicht in Pixeln ausgedrückt, wobei der Punkt 1/72 Zoll entspricht. Ein A4-Blatt besteht aus einer Breite von 595,2 Punkten und einer Höhe von 841,8 Punkten. Der Ursprung der Positionskoordinaten (0, 0) liegt in der unteren linken Ecke. Beim Erstellen einer Instanz von canvas.Canvas können Sie die Größe der Blätter mithilfe des Parameters pagesize angeben und ein Tupel übergeben, dessen erstes Element die Breite in Punkten und das zweite die Höhe darstellt. Die Methode c.showPage () teilt ReportLab mit, dass die Arbeit am aktuellen Blatt bereits abgeschlossen ist, und fährt mit dem nächsten fort. Obwohl ein zweites Blatt noch nicht bearbeitet wurde (und nicht im Dokument angezeigt wird, solange nichts gezeichnet wurde), sollten Sie dies vor dem Aufrufen von c.save () beachten. Zum Einfügen von Bildern in ein PDF-Dokument verwendet ReportLab die Kissenbibliothek. Die drawImage () -Methode verwendet als Argument den Pfad eines Bildes (unterstützt mehrere Formate wie PNG, JPEG und GIF) und die Position (x, y) in dem Bild, das Sie einfügen möchten. Das Bild kann verkleinert oder vergrößert werden, indem seine Abmessungen über die Argumente width und height angezeigt werden.
Der folgende Code enthält den Namen der PDF-Datei, eine Liste mit PNG-Dateien, Koordinaten zum Einfügen von Bildern sowie die Größe für Hochformat-Briefseiten.
def pntopd(file, figs, x, y, wi, he):
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, letter, landscape, portrait
w, h = letter
c = canvas.Canvas(str(file), pagesize=portrait(letter))
for png in figs:
c.drawImage(png, x, h - y, width=wi, height=he)
c.showPage()
c.save()
from datetime import date
from pathlib import Path
ruta = "C:/SQLite"
today = date.today()
dat_dir = Path(ruta)
tit = today.strftime("%y%m%d") + '_ParameterAudit'
pdf_file = tit + ".pdf"
pdf_path = dat_dir / pdf_file
pnglist = ['C0.png', 'C4387.png', 'C9712.png', 'C9685.png', 'C4364.png']
pntopd(pdf_path, pnglist, 50, 550, 500, 500)