Reportlab: DrawImage zeichnet kein Bild

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Daniel26
User
Beiträge: 26
Registriert: Freitag 2. Juni 2017, 09:29

Hallo,

ich versuche mit drawImage ein jpg ind das pdf zu zeichnen.
Mein Code sieht momentan so aus:

Code: Alles auswählen

def myFirstPage(self,canvas, doc):
        canvas.saveState()
        canvas.drawImage("/usr/share/myProgramm/pyHPSU-logo.jpg",self.page_width-(1*cm),self.page_height-(5*cm),width=10*cm,height=5*cm,mask=None, anchor="nw")
        canvas.setFont('Helvetica-Bold',16)
        canvas.drawCentredString(self.page_width/2.0, self.page_height-50, self.title)
        canvas.setFont('Helvetica',9)
        canvas.drawString(cm, 0.75 * cm,"Page 1")
        canvas.drawCentredString(self.page_width/2.0, 0.75 * cm, self.pageinfo)
        canvas.drawRightString(self.page_width-cm,0.75 * cm, self.creation_time)
        canvas.restoreState()
Später wird das ganze noch mit

Code: Alles auswählen

doc.build(Story, onFirstPage=self.myFirstPage, onLaterPages=self.myLaterPages)
zusammen gebaut.
Funktioniert soweit, nur mein Bild ist nicht da.
Hab ich da nen groben Denkfehler? Das ganze müsste doch so tun....

Gruß

Daniel
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Daniel26: Wenn Du statt oder zusätzlich zum Bild ein Rechteck (mit `canvas.rect()`) an der gleichen Stelle zeichnest, ist *das* dann zu sehen?

Ansonsten wäre ein minimales, lauffähiges Beispiel praktisch, damit man das mal nachvollziehen kann.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
noisefloor
User
Beiträge: 4187
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

hast du Pillow installiert? Das benötigt ReportLab zum Zeichnen von Bildern.

Wobei AFAIK eine Exception geworfen wird, wenn Pillow fehlt. Meine mich zumindest, mich an sowas zu erinnern...

Gruß, noisefloor
Daniel26
User
Beiträge: 26
Registriert: Freitag 2. Juni 2017, 09:29

Pillow musste ich nachinstallieren, da kam ne Ecception, das stimmt.
Das Rechteck hab ich auch nicht zu sehen bekommen...lag aber an nem evtl. komischen verhalten.

Hier mal was lauffähiges:

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
    
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from operator import itemgetter
from pathlib import Path
import time
import configparser
import os
import sys

page_height=defaultPageSize[1]
page_width=defaultPageSize[0]
styles = getSampleStyleSheet()
title = "PDF Test"
pageinfo = "Prog ver. 1.?"
creation_time = time.asctime()
logo = "/usr/share/pyProgramm/prog-logo.png"
file_path = str(Path.home())
file_name = "settings.pdf"
    
def myFirstPage(canvas, doc):
    canvas.saveState()
    #canvas.drawImage(logo,cm,page_height-(5*cm),width=10*cm,height=5*cm,mask=None, anchor="nw")
    canvas.rect(1*cm,page_height-(10*cm),width=10*cm,height=5*cm)
    canvas.setFont('Helvetica-Bold',16)
    canvas.drawCentredString(page_width/2.0, page_height-50, title)
    canvas.setFont('Helvetica',9)
    canvas.drawString(cm, 0.75 * cm,"Page 1")
    canvas.drawCentredString(page_width/2.0, 0.75 * cm, pageinfo)
    canvas.drawRightString(page_width-cm,0.75 * cm, creation_time)
    canvas.restoreState()

def myLaterPages(canvas, doc):
    canvas.saveState()
    canvas.setFont('Helvetica', 9)
    canvas.drawString(cm, 0.75 * cm,"Page %d" % (doc.page))
    canvas.drawCentredString(page_width/2, 0.75 * cm, pageinfo)
    canvas.drawRightString(page_width-cm,0.75 * cm, creation_time)
    canvas.restoreState()

def go(vars=None):
    file=file_path + "/" + file_name
    doc = SimpleDocTemplate(file)
    Story = [Spacer(1,2*cm)]
    style = styles["Normal"]
    for i in range(100):
        bogustext = ("Paragraph number %s. " % i) *20
        p = Paragraph(bogustext, style)
        Story.append(p)
        Story.append(Spacer(1,0.2*cm))
    doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)

if __name__ == "__main__":
    go()
Ich glaub, ich hab immer dieselbe Datei betrachtet. Einmal das PDF gelöscht ist der Ozutüut so, wie ich es erwartet hätte.

Scheint also vorerst geklärt.

Danke schonmal.

Gruß

Daniel
Antworten