【问题标题】:PyFPDF Add Unicode Font in Google App EnginePyFPDF 在 Google App Engine 中添加 Unicode 字体
【发布时间】:2018-06-23 09:43:47
【问题描述】:

如何使用 PyFPDF 在我的 GAE 应用程序中添加 unicode 字体?

我已经阅读了以下教程: https://pyfpdf.readthedocs.io/en/latest/Unicode/index.html#metric-files

FPDF 将尝试自动生成有关 TTF 字体文件的指标(即字符宽度)以加快其处理速度。

这些指标使用 Python Pickle 格式(.pkl 扩展名)存储,默认情况下在字体目录中(确保读写权限! em>)。有关缓存机制的其他信息在 add_font 参考中定义。

这里的问题是PyFPDF会在文件夹中创建度量文件(.pkl),它需要写权限,GAE不允许写文件,我应该怎么做?

谢谢!

乔尔

【问题讨论】:

  • 您可以尝试使用 GCS,例如,请参阅 stackoverflow.com/a/39525052/4495081,但这可能会很棘手,因为需要使用特定于 GCS 的 open() 而不是常规文件系统之一。您可能需要破解/扩展 fpdf.add_font()(或其内部结构)以及其他区域才能使其正常工作。
  • @DanCornilescu 感谢您提供的信息,我试过了,它可以工作。但是我看到另一个问题是加载PDF页面需要很长时间,通常加载不嵌入unicode字体只需大约5秒,添加unicode字体add_font()后需要30多秒,有时会导致超时错误。有解决这个问题的线索吗?
  • 使用更快的实例类是一种方法,但成本会上升。除此之外,您还必须进行一些分析才能了解需要这么长时间。可能只是因为它只是更繁重的处理。
  • 感谢 DanCornilescu。该问题已得到解决,按照@VictorGCI 的建议,通过设置 FPDF_CACHE_MODE 常量 = 1,一切都会完美运行。 :)

标签: python google-app-engine unicode fonts fpdf


【解决方案1】:

虽然公认的解决方案有效,但它要求您将 fpdf 源文件包含到您的项目中,如果您只想使用 fpdf 包,这并不理想。

在不更改源文件的情况下也可以使用的解决方案是通过 FPDF 包中提供的 set_global() 函数设置全局变量 FPDF_CACHE_MODE

例子:

import fpdf
fpdf.set_global("FPDF_CACHE_MODE", 1)

【讨论】:

    【解决方案2】:

    add_font() 函数使用 FPDF_CACHE_MODE 常量,该常量看起来像是指定是否写入 .pkl 文件的那个。该常数可能具有三个值(0、1 或 2)。如果设置为 1,则不会写入 .pkl 文件。该常量在库的fpdf.py 文件中定义。因此,在进行部署之前,您需要修改此文件并将常量设置为 1。

    【讨论】:

    • @VictorGCI 谢谢你的诀窍!它完美地工作。一直花几个小时解决这个问题,其实只要设置FPDF_CACHE_MODE = 1,一切都会正常的。
    猜你喜欢
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2011-05-16
    相关资源
    最近更新 更多