Bonjour, voilà que je me trouve devant un problème que je n'arrive pas a régler.
Je dois créer des images faisant apparaitre des codes barre.

J'ai donc créer une external method, qui pointe vers un script python qui s'il n'est pas appelé via Zope, fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
import PIL
import base64
 
def RPPSIMG(text='123456789'):
    s=text
    size=100,100
    image=PIL.Image.new('RGB', size,(255,255,255))
    draw = PIL.ImageDraw.Draw(image)
 
    font = PIL.ImageFont.load("/usr/share/fonts/Code39r.ttf")
    size=draw.textsize(s, font=font)
    image=PIL.Image.new('RGB', size,(255,255,255))
    draw = PIL.ImageDraw.Draw(image)
    draw.text((1,0), s, font=font,fill=(0,0,0))
    return base64.encodestring(image.tostring())
J'ai fait un import de PIL car il est probable que zope ait déjà un module Image.

Voici le message derreur :
IOError
cannot find glyph data file

Traceback (innermost last):

Module ZPublisher.Publish, line 119, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 42, in call_object
Module Products.ExternalMethod.ExternalMethod, line 231, in __call__
__traceback_info__: (('123456789',), {}, ('123456789',))
Module /home/zope/Extensions/imgCodeBar.py, line 11, in RPPSIMG
Module PIL.ImageFont, line 180, in load
Module PIL.ImageFont, line 79, in _load_pilfont

IOError: cannot find glyph data file
je répète que le script fonctionne s'il est utilisé en dehors de Zope.

Avez vous des suggestions.

Nota :
dans zope le code suivant fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import PIL
import base64

def RPPSIMG(text='123456789'):
    s='13213'
    size=100,100
    image=PIL.Image.new('RGB', size,(255,255,255))
    draw = PIL.ImageDraw.Draw(image)

    font = PIL.ImageFont.load_default()
    size=draw.textsize(s, font=font)
    image=PIL.Image.new('RGB', size,(255,255,255))
    draw = PIL.ImageDraw.Draw(image)
    draw.text((1,0), s, font=font,fill=(0,0,0))
    return base64.encodestring(image.tostring())