Почему шрифт не загружается в pfpd.add_font ()? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь добавить шрифт из библиотеки pfpdf в сгенерированный файл pdf, но после перемещения файла DejaVuSans.ttf в каталог «data» шрифт больше не может быть найден.

Вот упрощенный код:

from fpdf import FPDF
import os

pdf = FPDF()

if os.path.isfile("./data/DejaVuSans.ttf"):
    print("oof")

if os.path.isfile(os.path.join(os.getcwd(), "data", "DejaVuSans.ttf")):
    print("foo")

print(os.path.join(os.getcwd(), "data", "DejaVuSans.ttf"))

goal_dir = os.path.join(os.getcwd(), "data/DejaVuSans.ttf")
pdf.add_font("DejaVuSans", "", "DejaVuSans.ttf", uni=True)         # working if .ttf is in the same directory
#pdf.add_font("DejaVuSans", "", "./data/DejaVuSans.ttf" , uni=True) # not working
#pdf.add_font("DejaVuSans", "", os.path.join(os.getcwd(), "data", "DejaVuSans.ttf"), uni = True) # not working
#pdf.add_font("DejaVuSans", "", r"c:\Users\ciszk\Documents\ECP\data\DejaVuSans.ttf", uni = True)  # not working
#pdf.add_font("DejaVuSans", "", os.path.abspath(goal_dir), uni = True)   # not working
pdf.set_font("DejaVuSans", size=11)

pdf.add_page()

pdf.cell(0, 10, 'Hello', 0, 1, 'C')

pdf.output('oopsie.pdf')

Как видите, я пробовал несколько способов, но ни один из них, похоже, не работает.Вот что возвращает консоль:

oof foo Traceback (последний вызов был последним): файл "c: \ Users \ ciszk \ Documents \ ECP \ tempCodeRunnerFile.py", строка 25, в pdf.output ('oopsie.pdf') Файл "C: \ Users \ ciszk \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ fpdf \ fpdf.py", строка 1065, в выходной self.close ()Файл "C: \ Users \ ciszk \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ fpdf \ fpdf.py", строка 246, в закрытой self._enddoc () Файл "C: \ Users"\ ciszk \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ fpdf \ fpdf.py ", строка 1637, в файле _enddoc self._putresources ()" C: \ Users \ ciszk \ AppData \ Local\ Programs \ Python \ Python37-32 \ lib \ site-packages \ fpdf \ fpdf.py ", строка 1584, в файле _putresources self._putfonts ()" C: \ Users \ ciszk \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ fpdf \ fpdf.py ", строка 1288, в _putfonts ttfontstream = ttf.makeSubset (font ['ttffile'], подмножество) Файл" C: \ Users \ ciszk \ AppData \ Local \ Programs\ Python \ Python37-32 \ Lib \ сайт-пакеты \ FPDF \ ttfonts.py»,строка 459, в makeSubset self.fh = open (file, 'rb') FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'DejaVuSans.ttf'

Если в каталоге данных нетDejaVuSans.ttf, возникает ошибка:

Трассировка (последний последний вызов): файл "c: \ Users \ ciszk \ Documents \ ECP \ tempCodeRunnerFile.py", строка 18, в pdf.add_font ("DejaVuSans", "", os.path.abspath (goal_dir), uni = True) # не работает Файл "C: \ Users \ ciszk \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-пакеты \ fpdf \ fpdf.py ", строка 469, в add_font повысить RuntimeError (" Файл шрифта TTF не найден:% s "% fname) RuntimeError: Файл шрифта TTF не найден: c: \ Users \ ciszk \ Documents \ ECP \ data\ DejaVuSans.ttf

Я что-то упускаю из виду?Что я могу сделать, чтобы успешно добавить шрифт?

1 Ответ

0 голосов
/ 19 июля 2019

Вы должны удалить файлы с расширением .pkl в каталоге Font для фронта, который вы хотите использовать.

Эти файлы должны быть созданы при запуске скрипта, поскольку они содержат всю конфигурацию для вашего локального шрифта (путь, префикс ...).

Я думаю, у вас старая конфигурация шрифта, и поэтому она не работает.

...