Necesito ayuda para adjuntar archivos img en pdf. Usamos WeasyPrint lib para generar pdf desde html.
en html conecta un archivo img como este
<img src="1.png" alt=""> <img src="2.png" alt=""> <img src="3.png" alt="">Pero no está funcionando. no veo la imagen
use static para la ruta del archivo de imagen
{% load static %} <img src="{% static 'images/static.jpg' %}" alt="">y pase base_url en la clase HTML en views.py
pdf_file = HTML(string=rendered_html, base_url=request.build_absolute_uri())archivo html
<!DOCTYPE html> <html lang="en"> {% load static %} <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div> <img src="{% static 'images/static.jpg' %}" alt=""> </div> </body> </html>vistas.py
from django.template.loader import get_template from weasyprint import HTML, CSS from django.conf import settings from django.http import HttpResponse def generate_pdf(request): html_template = get_template('latest/html_pdf.html') user = request.user rendered_html = html_template.render().encode(encoding="UTF-8") pdf_file = HTML(string=rendered_html, base_url=request.build_absolute_uri()).write_pdf(stylesheets=[CSS(settings.STATIC_ROOT + '/css/generate_html.css')]) http_response = HttpResponse(pdf_file, content_type='application/pdf') http_response['Content-Disposition'] = 'filename="generate_html.pdf"' return http_responseEn caso de enviar correos electrónicos con pdf adjunto, es posible pasar la ruta de la vista a la función dedicada a los correos electrónicos. vistas.py
[...] path = request.build_absolute_uri() # build absolute path order_confirmation.delay(order.id, path) # pass to func [...]tareas.py
@app.task def order_confirmation(order_id, path): # receive path order = Order.objects.get(id=order_id) subject = f"Order nr. {order.id}" email_from = settings.EMAIL email_to = order.get_email message = (...) email = EmailMessage(subject, message, email_from, [email_to]) html = render_to_string('pdf.html', {'order' : order, 'company': company}) out = BytesIO() stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + '/css/pdf.css')] weasyprint.HTML(string=html, base_url=path).write_pdf(out, stylesheets=stylesheets) # use here email.attach(f'order_{order.id}.pdf', out.getvalue(), 'application/pdf') email.send()