我正在寫一個應用程序,其結果與一些文本與Unicode字符的PDF文件。在GAE devserver上效果很好,但部署後無法導入字體文件(在add_font()(pyfpdf)之後崩潰)。Unicode格式的PDF在GAE與web2py/pyfpdf
的代碼是:
# -*- coding: utf-8 -*-
def fun1():
from gluon.contrib.pyfpdf import FPDF, HTMLMixin
class MyFPDF(FPDF, HTMLMixin):
pass
pdf =MyFPDF()
pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True)
pdf.add_page()
pdf.set_font('DejaVu','',16)
pdf.write(10,'test-ąśł')
response.headers['Content-Type']='application/pdf'
return pdf.output(dest='S')
字體文件(具有的web2py服務器第一次運行後生成的文件DejaVuSansCondensed.pkl ...)是在/膠子/了contrib/FPDF /字體。我沒有添加任何東西到routers.py(我使用基於模式的系統)也app.yaml沒有改變。我得到這個:
In FILE: /base/data/home/apps/s~myapp/web2py-04.369240954601780983/applications/app3/controllers/default.py
Traceback (most recent call last):
File "/base/data/home/apps/s~myapp/web2py-04.369240954601780983/gluon/restricted.py", line 212, in restricted
exec ccode in environment
File "/base/data/home/apps/s~myapp/web2py-04.369240954601780983/applications/app3/controllers/default.py", line 674, in <module>
File "/base/data/home/apps/s~myapp/web2py-04.369240954601780983/gluon/globals.py", line 194, in <lambda>
self._caller = lambda f: f()
File "/base/data/home/apps/s~myapp/web2py-04.369240954601780983/applications/app3/controllers/default.py", line 493, in fun1
pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True)
File "/base/data/home/apps/s~myapp/web2py-04.369240954601780983/gluon/contrib/fpdf/fpdf.py", line 432, in add_font
font_dict = pickle.load(fh)
File "/base/data/home/runtimes/python27p/python27_dist/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/pickle.py", line 966, in load_string
raise ValueError, "insecure string pickle"
ValueError: insecure string pickle
正如我在本地(web2py/rocket和gae)說的那樣很好。僅部署後的東西像這樣工作的:
pdf =MyFPDF()
pdf.add_page()
pdf.set_font('Arial','',16)
pdf.write(10,'testąśł')
但是,如果沒有「不尋常」的字符...
最好的解決辦法是添加我的字體文件(如幻覺記憶),但基本上我需要Unicode字符在任何字體......也許一些「半解決方案」使用「通用GAE unicode」字體...如果它存在這樣的東西...
我會看看解決不安全的醃製錯誤。這通常是由開放的'rb'與'w'不匹配造成的,其中一個以二進制格式打開。 –