即使我指定@font-face
使用UTF-8字体,我之前也不会显示中文字符。事实证明我也无法显示图像...所以我似乎无法将任何文件嵌入到我的pdf中。
这是我使用的代码:
def render_to_pdf(template_src, context_dict):
"""Function to render html template into a pdf file"""
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")),
dest=result,
encoding='UTF-8',
link_callback=fetch_resources)
if not pdf.err:
response = http.HttpResponse(result.getvalue(), mimetype='application/pdf')
return response
return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))
def fetch_resources(uri, rel):
import os.path
from django.conf import settings
path = os.path.join(
settings.STATIC_ROOT,
uri.replace(settings.STATIC_URL, ""))
return path
HTML
<img src="/static/images/bc_logo_bw_pdf.png" />
和
@font-face {
font-family: "Wingdings";
src: url("/static/fonts/wingdings.ttf");
}
我看了SO上的其他任务,但没有任何帮助。这两个函数也没有例外。同样在fetch_resources
函数中,返回的路径是文件的正确完整路径,即/home/<user>/project/static/images/bc_logo_bw_pdf.png
和/home/<user>/project/static/fonts/wingdings.ttf
,我不知道出了什么问题。
更新 每次我创建一个pdf,我都会在控制台上收到此消息
No handlers could be found for logger "ho.pisa"
这可能是相关的吗?
更新#2
现在字体有效我犯了一个愚蠢的错误......我使用的字体没有中文unicode。但我仍然无法将任何图像嵌入到pdf中,无论是jpeg,gif还是png。
答案 0 :(得分:3)
我终于解决了我遇到的问题...事实证明,如果我用css设置body
的高度它就行不通了......一旦我移除了那条线,图像加载完美...
答案 1 :(得分:0)
对我来说(django 1.4,python 2.7 pisa == 3.0.33),如果我把图像的完整路径代替相对,它对我有用。 尝试做同样的事情。
答案 2 :(得分:0)
一切看起来都更好。尝试使用JPG图像文件。就我而言,PNG文件也无效。
<img src="/static/images/<name>.jpg" />
答案 3 :(得分:0)
没有width
和height
属性图片将无效。添加宽度和高度属性。
<img src="{% static 'images/logo.png' %}" alt="image" width="200" height="150" />
这个修复对我有用。
答案 4 :(得分:-2)
我在这里遇到同样的问题。不要放弃使用XHTML2PDF比萨 比萨使用PIL生成PDF并使用lib zip解码器插入图像 你应该检查你的PIL是否已经正确安装了zip解码器,字体和几个组件
我通过使用zip解码器安装PIL解决了这个问题 http://obroll.com/install-python-pil-python-image-library-on-ubuntu-11-10-oneiric/
如果您需要更多详细信息,可以在此处阅读我的文章: http://obroll.com/how-to-load-images-files-style-css-in-pdf-using-pisa-xhtml2pdf-on-django/