Исправить загрузочную таблицу в PDF, сгенерированном weasyprint - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь создать таблицу PDF с Weasyprint на моем сайте Django. Эта же таблица показана на html-странице и с Weasyprint. Когда я использую цвета начальной загрузки в html-версии, он отображается правильно, но цвета теряются в версии Weasyprint. Это единственная функция, отсутствующая в версии Weasyprint, которая работает иначе.

views.py

@login_required
def scale_answer_pdf(request, scale_id):
    scale = get_object_or_404(UserScale, pk=scale_id)
    if scale.user == request.user or request.user.is_superuser:
        if scale.scale_meta.title == "Now":
            choices = NowLegend
            class ScaleForm(forms.ModelForm):
                class Meta:
                    model = NowModel
                    fields = labellist(NowLabels)
                    labels = NowLabels
        if scale.scale_meta.title == "Child":
            choices = NowLegend
            class ScaleForm(forms.ModelForm):
                class Meta:
                    model = ChildModel
                    fields = labellist(ChildLabels)
                    labels = ChildLabels
        form = ScaleForm(instance=scale)
        **html = render_to_string('diagnosis/scale_answer_pdf.html', 
{'form': form, 'scale':scale, 'choices':choices})
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'filename="{} - {} - 
{}.pdf"'.format(scale.scale_meta.title, scale.user.username, 
scale.created.strftime('%Y-%m-%d'))
       weasyprint.HTML(string=html, 
base_url=request.build_absolute_uri()).write_pdf(response, 
presentational_hints=True, stylesheets= 
[weasyprint.CSS(settings.STATIC_ROOT + '/css/sb-admin-2.min.css'), 
weasyprint.CSS(settings.STATIC_ROOT +'/css/all.min.css')])
        return response**
    else:
        raise Http404

html для PDF - CSS Boostrap работает, и таблица также отображается. Но цвета из таблицы нет. Я выделяю части таблицы, которые не показывают цвета

    {% extends "base_pdf.html" %}
{% load i18n %}
{% load staticfiles %}
{% load get_item %}
{% block content %}
<div class="container-fluid">
     <div class="row">
<div class="col-sm-6 mx-auto" >
    <p class="text-center"><img height="120" width="120" src="{{scale.scale_meta.icon.url}}" alt="Test icon" class="img-fluid"></p>
    </br>
    <h1 class="text-center">{{scale.meta.title}}</h1>
        {% with scale.created as created %}
        {% with scale.user.username as username %}
    <h4 class="text-center">{% blocktrans %}Created the {{created}} by {{username}}{% endblocktrans %}</h4>
    </br>
   <p class="text-center">{% trans "A test by" %}<img src="{% static 'icon.png' %}" height="30" width="30" style="margin-right:1px;"/><a href="Atrapamente.com">Atrapamente</a></p>

  <table class="table table-striped">
       <tbody>
        **<tr class="table-info">**
    <td>{% trans "Question" %}<td>
    <td>{% trans "Answer type" %}<td>
    <td>{% trans "Answer" %}<td>
        </tr>
    {% for field in form %}
    {% with name=field.name %}
    {% if choices|get_item:name == "0 to 6" %}
        {% if field.value > "4" %}
        **<tr class="table-danger">**
        {% endif %}
         {% if field.value > "2" and field.value < "5" %}
        **<tr class="table-warning">**
        {% endif %}
        {% if field.value <= "2" %}
        **<tr class="table-success">**
        {% endif %}
    {% elif choices|get_item:name == "0 to 10" %}
        {% if field.value <= "4" %}
        **<tr class="table-danger">**
        {% endif %}
         {% if field.value > "4" and field.value < "7" %}
        **<tr class="table-warning">**
        {% endif %}
        {% if field.value >= "7" %}
        **<tr class="table-success">**
        {% endif %}
    {% endif %}
    <td>{{field.label}}<td>
    <td>{{choices|get_item:name}}<td>
    <td >{{field.value}}<td>
        </tr>
    {% endwith %}
    {% endfor %}
    </tbody>
</table>
</div>
     </div>
</div>
 <br/>
 <br/>
{% endwith %}
{% endwith %}
{% endblock %}

1 Ответ

0 голосов
/ 22 октября 2019

BootStrap и файлы. CSS не работает правильно в weasyprint,

Лучше использовать CSS <style> в HTML-файле.

Вот так:

<style> /* use CSS into style */
      @page {
        size: A4; /* Change from the default size of A4 */
        margin: 3.5mm; /* Set margin on each page */
      }
</style>

Bye.

...