skip to Main Content

I have deployed a Django project using Apache2, everything is working fine except for weazyprint which creates PDF file for forms. The pdf was working fine in testing and local host.

Now everytime I access the pdf it is showing this error:

FileNotFoundError at /business_plan/businessplan/admin/info/2/pdf/
[Errno 2] No such file or directory: '/home/ahesham/Portfolio/static\css\report.css'

I have tried to change the and adding it twice but it didn’t work
here is the views.py

def admin_order_pdf(request, info_id):
    info = get_object_or_404(Info, id=info_id)
    html = render_to_string('businessplan/pdf.html', {'info': info})
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'filename="order_{}.pdf"'.format(
        Info.id)
    weasyprint.HTML(string=html,base_url=request.build_absolute_uri()).write_pdf(response,
                                           stylesheets=[weasyprint.CSS(settings.STATICFILES_DIRS[0] + 'css\report.css')], presentational_hints=True)
    return response

The error is comming from this css\report.css knowing that the report.css file is in the static folder and all css and js of the deplyed site is working perfectly fine and I tried python manage.py collectstatic did not work.

I am not sure exactly why is the error showing if it is because of ubunto or django views.

Update:

I have tried changing the location to be as following:

stylesheets=[weasyprint.CSS(settings.STATICFILES_DIRS[0] + '/css/report.css')], presentational_hints=True) 

This is the error that appeared

function/symbol 'pango_context_set_round_glyph_positions' not found in library 'libpango-1.0.so.0': /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0: undefined symbol: pango_context_set_round_glyph_positions

So I have searched for the solution and I tried to download this package:

sudo apt-get install libpango1.0-0

and also tried:

install libpango1.0-dev

but still nothing changed it wouldn’t work getting the same error.

I have also tried replacing static directory with static root as the project is deployed buy i got the same error function/symbol 'pango_context_set_round_glyph_positions' the following:

stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + '/css/report.css')]

This is the settings file:

STATIC_URL = '/static/'
#if DEBUG:
#    STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
#else:
#STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static' )]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

I am using Ubuntu 18.04 LTS Disk – Apache2 Server

My question:
What am I doing wrong and how do I fix it?

Please let me know if additional information required to help fix this error.

Any feedback will be highly appreciated if there are other ways to display PDF in Django admin

2

Answers


  1. Probably Weasyprint was not downloaded properly:

    try:

    pip install django-weasyprint
    

    source: https://pypi.org/project/django-weasyprint/

    Login or Signup to reply.
  2. I had also faced the same error

    ‘pango_context_set_round_glyph_positions’ not found in library

    i think you must be using weasyprint version 53.0 which requires pango version 1.44.0+

    downgrading the weasyprint version to 52.5 solved my issue.because this does not require recent version of pango.

    you can also check this https://github.com/Kozea/WeasyPrint/issues/1384

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search