Google App Engine, ReportLab и шрифты True Type - PullRequest
2 голосов
/ 10 апреля 2011

Все!Я пишу приложение, которое будет работать на Google App Engine.Я использую ReportLab для генерации PDF файлов.Тем не менее, приложение должно иметь возможность генерировать PDF с кириллическим текстом.Поэтому мне нужно загрузить шрифт True Type.Я должен написать что-то вроде этого

pdfmetrics.registerFont(TTFont('Verdana', 'verdana.ttf'))

Я пытался скопировать файл verdana.ttf в /reportlab/fonts, но registerFont снова не удалось.Однако в настольной среде все работает нормально.

Как загрузить шрифт True Type из приложения, работающего в GAE?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 27 декабря 2016

, если вы используете Docker-контейнер для этой работы или в любой среде Linux, просто используйте

pdfmetrics.registerFont(TTFont('Verdana', 'Vera.ttf'))

или

pdfmetrics.registerFont(TTFont('Verdana-Bold', 'VeraBd.ttf'))

вместо

pdfmetrics.registerFont(TTFont('Verdana', 'verdana.ttf'))

это сработало для меня.

0 голосов
/ 12 июня 2015

Ответ ниже хорош, но не работает на Google App Engine, я не знаю почему!Вот простой пример, основанный на каталоге приложений для разработчиков колб:

~ / myapp

       |-- mymodule.py
       |-- myfont.ttf

Итак, ваш код будет:

font = r"myfont.ttf"
pdfmetrics.registerFont(TTFont("myfont", font))
0 голосов
/ 10 апреля 2011

Согласно документации:

В оригинальном патче Мариуса имя файла должно было быть точно правильным, но мы изменили его так, чтобы, если имя файла относительное, поиск соответствующего файла выполнялся в текущем каталоге, а затем в каталогах, указанных в reportlab. rl_config.TTFSearchpath!

Поскольку при загрузке вы не сможете изменить /reportlab/fonts, вам нужно просто загрузить его, а затем указать местоположение относительно текущего рабочего каталога (должен быть тот же каталог, в котором находится ваш код Python в, но если это не сработает, вам может понадобиться проверить документацию GAE о том, где вы можете разместить файлы поддержки, такие как шрифт на сервере).

Но, может быть, я неправильно понял, и это то, что вы пытались сделать и потерпели неудачу?

...