Относится к: django - pisa: добавление изображений в вывод PDF
У меня есть сайт, который использует Google Chart API для отображения множества отчетов пользователю, и я пытаюсь реализовать PDF-версию. Я использую параметр link_callback
в pisa.pisaDocument
, который отлично работает для локальных медиа (css / images), но мне интересно, будет ли он работать с удаленными изображениями (с помощью URL-адреса Google-диаграмм).
Из документации на веб-сайте Пизы они подразумевают, что это возможно, но не показывают, как:
Normaly Pisa ожидает, что эти файлы будут найдены на локальном диске. На них также можно ссылаться относительно исходного документа. Но программист может захотеть загрузить из различных источников, таких как Интернет, через HTTP-запросы или из базы данных или чего-либо еще.
Это в проекте Django, но это не имеет значения. Вот что я использую для рендеринга:
html = render_to_string('reporting/pdf.html', keys,
context_instance=RequestContext(request))
result = StringIO.StringIO()
pdf = pisa.pisaDocument(
StringIO.StringIO(html.encode('ascii', 'xmlcharrefreplace')),
result, link_callback=link_callback)
return HttpResponse(result.getvalue(), mimetype='application/pdf')
Я пытался заставить link_callback вернуть объект запроса urllib, но, похоже, он не работает:
def link_callback(uri, rel):
if uri.find('chxt') != -1:
url = "%s?%s" % (settings.GOOGLE_CHART_URL, uri)
return urllib2.urlopen(url)
return os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
PDF-файл, который он генерирует, получается превосходным, за исключением того, что в Google Chart нет изображений.