Seite 1 von 1

Reportlab: DrawImage zeichnet kein Bild

Verfasst: Samstag 5. Januar 2019, 13:36
von Daniel26
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

Re: Reportlab: DrawImage zeichnet kein Bild

Verfasst: Samstag 5. Januar 2019, 13:56
von __blackjack__
@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.

Re: Reportlab: DrawImage zeichnet kein Bild

Verfasst: Samstag 5. Januar 2019, 16:47
von noisefloor
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

Re: Reportlab: DrawImage zeichnet kein Bild

Verfasst: Samstag 5. Januar 2019, 17:08
von Daniel26
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