xhtml2pdf 可以很好地在 App Engine 上生成简单的 PDF。
但是现在我需要在生成的 PDF 中添加自定义字体,我似乎没有找到一个简单的解决方案来做到这一点。
我将此 CSS 添加到 HTML 以转换为 PDF:
@font-face {
font-family: OpenSans;
src: url("http://mydomain/fonts/Open-Sans-regular.ttf");
}
body {
font-family: OpenSans;
}
这会产生此错误:
File "[..]/xhtml2pdf/util.py", line 613, in getNamedFile
self.tmp_file = tempfile.NamedTemporaryFile()
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/dist/tempfile.py", line 61, in PlaceHolder
raise NotImplementedError("Only tempfile.TemporaryFile is available for use")
NotImplementedError: Only tempfile.TemporaryFile is available for use
tempfile
GAE 不支持,所以我尝试tempfile.NamedTemporaryFile()
通过在 GCS 中创建一个临时文件来替换,如下所示:
self.tmp_file = gcs.open('/gcs_bucket_temp/temp_file',
'w',
retry_params=gcs.RetryParams(backoff_factor=1.1))
但这会造成难以修复的重大更改:xhtml2pdf 对ttfonts.py
(例如 ttfonts.py:321 unpack('>L',self._ttf_data[self._pos - 4:self._pos])[0]
)中的临时文件进行大量读取访问,这似乎很难迁移到使用 GCS 文件。
有没有人能够在 App Engine 上使用 xhtml2pdf 生成带有自定义字体的 PDF?