Używam Django + WeasyPrint do generowania HTML do PDF.

W szablonie HTML mam około 2 plików SVG. Działając na serwerze deweloperskim (lokalnym), renderował obrazy SVG podczas konwersji HTML do PDF. Podczas gdy w TEST Server (który działa przy użyciu NGINX i Docker Container), nie udaje się renderować plików SVG. W WeasePrint wspomniałem mój TESTOWY adres URL (http // test.sampleproject.com: 8000) w base_url. Nie wiem, dlaczego działa na moim serwerze deweloperskim, a nie na serwerze TEST

Mój kod.

html_string = render_to_string('sample.html', {'data': data})
result = HTML(string=html_string, base_url='http//test.sampleproject.com:8000').write_pdf(presentational_hints=True)
response = HttpResponse(result, content_type='application/pdf')
response['Content-Disposition'] = 'inline; filename={}'.format('sample.pdf')
return response

W moim pliku szablonu załadowałem około 10 obrazów. Np .: plik szablonu „sample.html”:

  {% load staticfiles %}
  <img src="{% static 'svg/Logo1.svg' %}" alt="" />
  <img src="{% static 'svg/Logo2.svg' %}" alt="" />

Proszę, pomóż mi renderować pliki SVG w wyjściowym pliku PDF.

0
Mohamed Azarudeen 15 grudzień 2019, 12:36
Weasyprint wymaga zainstalowania kilku bibliotek na poziomie systemu operacyjnego. Czy zostały one zainstalowane na serwerze TEST? Wygląda na to, że brakuje Ci CairoSVG na serwerze TEST: weasyprint.readthedocs.io/en /stabilny/instalacja.html
 – 
FlipperPA
15 grudzień 2019, 13:29

1 odpowiedź

W przeszłości wykonałem trochę pracy z Django + Weasyprint i jedyny raz, kiedy miałem problem z renderowaniem obrazów, wynikał z faktu, że Weasyprint uzyskuje dostęp do obrazu w inny sposób.

Okazało się, że muszę dodać statyczny punkt końcowy, aby uzyskać dostęp do plików, ponieważ żąda on statycznych obrazów zewnętrznie do Django. Oto jak możesz umożliwić dostęp do swoich statycznych zasobów z zewnątrz;

https://docs.djangoproject.com/en/3.0/howto/static-files/#s-serving-static-files-during-development

Jak wspomina FlipperPA, upewnij się, że na serwerze są zainstalowane wszystkie biblioteki na poziomie systemu operacyjnego;

https://weasyprint.readthedocs.io/en/latest/install.html

Mam nadzieję że to pomoże :)

0
Benjamino 16 grudzień 2019, 00:38