Google App Engine, ReportLab и шрифты True Type

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

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

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

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

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


person Andrey Sboev    schedule 09.04.2011    source источник


Ответы (3)


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

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

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

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

person G Gordon Worley III    schedule 10.04.2011
comment
если я запускаю скрипт без GAE, reportlab находит шрифты в /reportlab/fonts, и их документация говорит, что это правильный каталог для размещения шрифтов. Но модуль reportlab, который я использую, представляет собой заархивированный архив, скопированный в исходный каталог приложения, и шрифты находятся в этом архиве. Проблема была решена путем копирования файлов шрифтов в исходный каталог приложения. - person Andrey Sboev; 11.04.2011

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

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

or

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

вместо

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

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

person Mehmet nuri    schedule 27.12.2016

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

~/мое приложение

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

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

font = r"myfont.ttf"
pdfmetrics.registerFont(TTFont("myfont", font))
person Nasser Abdou    schedule 12.06.2015