为什么 pfpd.add_font() 中没有加载字体?

2024-01-23

我正在尝试将 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')

正如你所看到的,我尝试了多种方法,但似乎都不起作用。 这就是控制台返回的内容:

钱币 富 回溯(最近一次调用最后一次): 文件“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\site-packages\fpdf\ttfonts.py”,第 459 行,在 makeSubset 中 self.fh = 打开(文件,'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-packages \ fpdf \ fpdf.py”,第469行,在add_font中 引发 RuntimeError("TTF 字体文件未找到:%s" % fname) 运行时错误:找不到 TTF 字体文件:c:\Users\ciszk\Documents\ECP\data\DejaVuSans.ttf

我错过了一些非常明显的东西吗?如何才能成功添加字体?


您必须删除要使用的字体目录中扩展名为 .pkl 的文件。

这些文件必须在脚本运行时创建,因为它们包含本地字体的所有配置(路径、前缀...)。

我认为你有旧的字体配置,这就是它不起作用的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 pfpd.add_font() 中没有加载字体? 的相关文章

  • 带有空格的 Firestore 文档字段名称在 Python 中与 .where() 一起使用时会返回错误

    使用 Firebase 的 Cloud Firestore 在 Python 3 7 中编写一个非常简单的程序 在程序中 我使用 where 下拉集合的一部分 然后使用 for 循环对其进行迭代 当任何带有空格的字段名称被传递到 where
  • Django Rest Framework——没有名为rest_framework的模块

    我已经使用安装了 django rest 框架pip install djangorestframework但当我运行 python3 manage py sycndb 时 我仍然收到此错误 导入错误 没有名为 rest framework
  • 如何使用 PyCharm 运行 Pylint

    我想将 Pylint 配置为我正在处理的 Python 项目的整个项目目录中的外部工具 我尝试将存储库用作模块 init py没有的话 这两种方式都不起作用 我在设置 Pylint 与 PyCharm 一起运行时遇到困难 我知道我应该将它作
  • 芹菜中未处理的异常冻结了工人

    我通过 redis 后端在 docker 中运行 celery 我有 芹菜搅拌容器 芹菜工人容器 Redis容器 celery 工作容器生成 6 个工作进程 如果 celery 任务遇到异常 工作人员 所有工作人员 将停止使用作业 我尝试稍
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • 我可以在我的机器上同时安装 python 2.7 和 3.5 的tensorflow吗?

    目前我通过 Anaconda 在我的机器 MAC OX 上安装了 Python 2 7 Python 3 5 Tensorflow for Python 3 5 我也想在我的机器上安装 Tensorflow for Python 2 7 当
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • PyCharm 表示 readline 导入未被使用

    我有这个代码 while True cmd input gt if cmd exit break 但我想实现高级文本输入功能 例如命令历史记录 因此我导入了 readline 模块 导入 readline 模块 甚至不使用它 将解锁这些功能
  • 更新到 Django 1.8 - AttributeError: django.test.TestCase 没有属性 'cls_atomics'

    我将 Django 1 7 项目更新为 Django 1 8 现在运行测试时出现错误 它们是 Django 的子类 django test TestCase Traceback most recent call last File env
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 无法让gunicorn使用Python 3

    我有 Ubuntu NGINX Gunicorn 以及可与 Python 3 设置配合使用的虚拟环境 但我的 Flask 应用程序仍然以 2 7 6 运行 我已系统地按照说明进行操作 但找不到解决方案 Gunicorn 配置文件 progr
  • 使用 os.write 打印字体图标

    在 Windows 10 上使用 Python 3 8 3 我的终端 使用nerdfont https github com ryanoasis nerd fonts tree master patched fonts Agave有图标的
  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • tkinter - 检查文本小部件是否为空

    操作系统 Windows 8 1 Python 3 5 在 Tkinter 中 我发现了很多代码来验证输入框是否为空 但是当我尝试对文本小部件应用相同的方法时 它不起作用 看起来文本小部件有一个 n 字符 这可能就是问题所在 知道如何进行此
  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • 没有名为 StringIO 的模块

    我有Python 3 6 我想从另一个名为 run py 的 python 文件执行名为 operation py 的 python 文件 In operation py I do from cStringIO import StringI
  • pytesseract 无法从图像中识别复杂的数学公式

    我在用pytesseractpython 中的模块 pytesseract从图像中识别文本 但它不适用于包含复杂数学公式 例如根 推导 积分数学问题或方程 的图像 代码2 py Import modules from PIL import

随机推荐

  • 使用 Javascript 跨浏览器以编程方式添加书签链接

    有没有一个脚本可以解决这个问题 我希望能够说 单击 另存为书签 我搜索了一下并发现this one http www dynamicdrive com dynamicindex9 addbook htm 但它不适用于 Safari 有人有
  • maven更新后java版本自动更改为java 1.5

    我使用 eclipse 作为 IDE 当我右键单击该项目 然后单击 maven 时 将我的 java 版本更改为 1 5 这是我到目前为止所做的 我遵循了此处列出的所有步骤 http qussay com 2013 09 13 solvin
  • 使用 DrawingContext 绘制“L”

    我需要绘制 使用System Windows Media DrawingContext a L 在 WPF 中 最佳的继续方式是什么 画2条线 画一个PolyLineSegment 不知道如何 drawContext DrawLine my
  • 如何在 Ruby 正则表达式中使用 AND

    我在使用 Ruby 正则表达式时遇到问题 如何在 ruby 中执行 AND 正则表达式 ex cat and dog cat dog I just want to match cat and dog 您可以使用积极的前瞻来执行类似 AND
  • 将日志发送到 Crashlytics 而不会导致应用程序崩溃

    如何让 Crashlytics 接收日志而不让我的应用程序崩溃 我有以下代码 if context managedObjectContext save error CLS LOG error description 发生错误时 我希望 Cr
  • Jsoup 遇到特殊 HTML 符号问题,‘ — 等

    我有一些 HTML 字符串 我通过 Jsoup 放置这些内容 这样我就可以向所有 href 和 src 属性添加一些内容 效果很好 然而 我注意到对于一些特殊的 HTML 字符 Jsoup 正在将它们从 ldquo 到实际角色 我输出之前和
  • 在线程之间同步/发送数据

    该应用程序是用 Delphi XE 编写的 我有两个类 TBoss 和 TWorker 它们都基于 Thread TBoss是一个单实例线程 它启动后会创建大约20个TWorker线程 当 Boss 创建 TWorker 实例时 它会为其分
  • 在 PHP 中解析时需要在 JSON feed 中保留反斜杠

    以下是我们的 JSON 源之一的示例 wiggins id bkstir 04380 wdr q alertcolour yellow infohvr infoclk warning 10 warnhvr There are 10 file
  • 学习使用线程来防止数据竞争情况

    以下代码应该通过在公共端使用同步方法来防止数据争用 但由于某种原因 输出始终是 19915 19980 如果不是数据竞赛的话不应该是20000吗 public class SyncVarDataRace extends Thread pri
  • 在调试和生产模式之间切换

    开发时调试应用程序的一种快速方法是编写如下语句 print data 有没有办法在切换到生产模式时停止打印 这样就不会影响应用程序的性能 例如 布尔值作为开关 您可以使用debugPrint代替print仅用于开发日志记录 debugPri
  • inverse_of 在 mongoid 中意味着什么?

    What inverse of是什么意思 通过使用它而不是没有它的关联我能得到什么 在简单关系中 两个模型只能以一种方式关联 并且关系的名称自动是与其相关的模型的名称 这在大多数情况下都很好 但并不总是足够 inverse of允许您指定您
  • 如何修改主机头

    我正在尝试开发一个 chrome 扩展 它可以根据某些请求设置 主机 标头 但对于是否可以修改 host 标头 文档是矛盾的 这两个问题都表明a 这不应该是可能的 b 这是不可能的https code google com p chromi
  • 文本链接不会在 Safari 中使用名称通过 JavaScript 提交表单

    我正在使用 Safari 5 0 3 我的 html 中有一个表单
  • 这第二个新的是什么?

    第二行是什么 在回答另一个问题时看到的 int x new int 1 int y new x int 第二行之后 x 和 y 具有相同的值 指向相同的位置 y x 和第二行有什么区别 它像构造函数还是什么 It s 安置新 http en
  • 无法自动装配。存在多个“DataSource”类型的 bean

    我正在尝试通过以下方式自动连接数据库 Autowired private DataSource dataSource 我的数据源中有一个application yml spring profiles active dev spring pr
  • ASP.NET -> WCF 服务需要 Windows 身份验证

    我的任务是构建一个基本的管理应用程序 该应用程序需要一个 ASP NET 前端 该前端使用 WCF 与许多后端服务进行通信 一项要求是应用程序的用户使用 Windows 身份验证进行身份验证 如果应用程序逻辑包含在 ASP NET 应用程序
  • 如何改变CKEditor的编辑器大小?

    由于它是一个 textarea 我在 html 属性中尝试了 cols 50 但它不起作用 另外 我从上一个问题中找到了答案 他说我可以通过添加来做到这一点 CKEDITOR instances myinstance resize 1000
  • “JqueryStatic”类型的值不可调用

    我正在开发一个打字稿项目 当我调用 时 编辑器显示 JqueryStatic 类型的值不可调用 我安装了 jquery definetelyTyped 包 并且还引用了 jquery d ts 文件 Resharper 9 0 不支持 Ty
  • 如何使用zxing条码扫描库解码EAN128条码

    我正在尝试使用 zxing 条码扫描库读取 EAN128 条码 我在 Xamarin 共享项目中使用它 如下所示 private async void OnButtonForBarcodeReadPressed object sender
  • 为什么 pfpd.add_font() 中没有加载字体?

    我正在尝试将 pfpdf 库中的字体添加到生成的 pdf 文件中 但将 DejaVuSans ttf 移动到 data 目录后 无法再找到字体 这是一个简化的代码 from fpdf import FPDF import os pdf FP