2016-06-08 5 views
0

Я создаю pdf из html, и он преобразуется, но без изображения. я пробовал абсолютные URL'ы также, но она по-прежнему не работает функция PDF:xhtml2pdf не получается изображение

def test_pdf(request): 

    template = get_template('../templates/index.html') 
    html = template.render(Context(data)) 
    filename = 'pdfs/'+str(random.random())+'.pdf' 

    file = open(filename, "w+b") 
    pisaStatus = pisa.CreatePDF(html.encode('utf-8'), dest=file, encoding='utf-8',link_callback=link_callback) 
    # Return PDF document through a Django HTTP response 
    file.seek(0) 
    pdf = file.read() 
    file.close()   # Don't forget to close the file handle 
    return HttpResponse({"success":"success"}) 

def link_callback(uri, rel): 

    sUrl = settings.STATIC_URL  # Typically /static/ 
    sRoot = settings.STATIC_ROOT # Typically /home/userX/project_static/ 
    mUrl = settings.MEDIA_URL  # Typically /static/media/ 
    mRoot = settings.MEDIA_ROOT  # Typically /home/userX/project_static/media/ 


    if uri.startswith(mUrl): 
     path = os.path.join(mRoot, uri.replace(mUrl, "")) 

    elif uri.startswith(sUrl): 
     path = os.path.join(sRoot, uri.replace(sUrl, "")) 

    else: 
     return uri # handle absolute uri (ie: http://some.tld/foo.png) 

    if not os.path.isfile(path): 
      raise Exception(
       'media URI must start with %s or %s' % (sUrl, mUrl) 
      ) 
    return path 

настройки файла:

PROJECT_ROOT = "/var/www/html/newclone/userapi/" 
MEDIA_ROOT = path.join(PROJECT_ROOT,'media') 
MEDIA_URL = '/media/' 
STATIC_ROOT = path.join(PROJECT_ROOT,'static-root') 
STATIC_URL = "/static/" 

Что плохого в этом нет. PDF генерируется успешно, но изображения отсутствуют

HTML файл:

<div class="h1"><img src="/media/xyz"></div> 
+0

Это не реальный ответ, но я использовал django-xhtml2pdf для рендеринга pdf-файлов с django с большим успехом (https://github.com/chrisglass/django-xhtml2pdf) и также написал довольно обширное сообщение в блоге о том, что именно (http://spapas.github.io/2015/11/27/pdf-in-django/) ... Для вашей проблемы это, вероятно, связано с абсолютным img src у вас есть - попробуйте использовать тег {% static%} для этого (или получить URL-адрес контента, если он является носителем). – Serafeim

+0

@Serafeim Уже прочитали эти ссылки. Функция link_callback считывает носитель и заменяет URL-адрес так, как поможет ключевое слово {% static%}? –

ответ

0

не могли даже представить себе ошибку: в моей CSS я написал:

.main{width:75%;} 

из-за этого изображения были невидимый. Я просто удалил его случайным образом, и изображения начали отображаться

Смежные вопросы