微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

那么不能使用 weasyprint 什么是最好的做法? 您可以使用 pipPython 包索引命令安装它:###

如何解决那么不能使用 weasyprint 什么是最好的做法? 您可以使用 pipPython 包索引命令安装它:###

提前致谢。 我正在尝试将 django 项目加载到服务器上。我意识到我无法更新开罗的 weasyrprint。我想将代码更改为其他内容。我在想pylatex??这是用于 html 到 pdf 的。 在我的订单应用 views.py

@staff_member_required
def admin_order_pdf(request,order_id):
    order = get_object_or_404(Order,id=order_id)
    html = render_to_string('orders/order/pdf.html',{'order': order})
    response = HttpResponse(content_type='application/pdf')
    response['Content-disposition'] = f'filename=order_{order.id}.pdf'
    weasyprint.HTML(string=html).write_pdf(response,stylesheets=[weasyprint.CSS(
            settings.STATIC_ROOT + 'css/pdf.css')])
    return response

在我的付款tasks.py中

# generate PDF
html = render_to_string('orders/order/pdf.html',{'order': order})
out = BytesIO()
stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + 'css/pdf.css')]
weasyprint.HTML(string=html).write_pdf(out,stylesheets=stylesheets)



# attach PDF file
email.attach(f'order_{order.id}.pdf',out.getvalue(),'application/pdf')

最后在我的订单应用 pdf.html

<html>
<body>
  <h1>Mom and Pops</h1>
  <p>
    Invoice no. {{ order.id }}</br>
    <span class="secondary">
      {{ order.created|date:"M d,Y" }}
    </span>
  </p>

  <h3>Bill to</h3>
  <p>
    {{ order.first_name }} {{ order.last_name }}<br>
    {{ order.email }}<br>
    {{ order.address }}<br>
    {{ order.postal_code }},{{ order.city }}
  </p>

  <h3>Items bought</h3>
  <table>
    <thead>
      <tr>
        <th>Product</th>
        <th>Price</th>
        <th>Quantity</th>
        <th>Cost</th>
      </tr>
    </thead>
    <tbody>
      {% for item in order.items.all %}
        <tr class="row{% cycle "1" "2" %}">
          <td>{{ item.product.name }}</td>
          <td class="num">${{ item.price }}</td>
          <td class="num">{{ item.quantity }}</td>
          <td class="num">${{ item.get_cost }}</td>
        </tr>
      {% endfor %}
      <tr class="total">
        <td colspan="3">Total</td>
        <td class="num">${{ order.get_total_cost }}</td>
      </tr>
    </tbody>
  </table>

  <span class="{% if order.paid %}paid{% else %}pending{% endif %}">
    {% if order.paid %}Paid{% else %}Pending payment{% endif %}
  </span>
</body>
</html>

在路易斯的帮助下,这就是我想出的。它将无法加载,但我可以创建测试 pdf,这意味着它在脚本中。

@staff_member_required
def admin_order_pdf(request,order_id):
      template_path = 'orders/order/pdf.html'
      order = get_object_or_404(Order,id=order_id)
      pdf = open('order.pdf',"w+b")
      context = {'order': order}
      response = HttpResponse(content_type='application/pdf')
      response['Content-disposition'] = f'filename=order_{order.id}.pdf'
      template = get_template(template_path)
      source_html = render_to_string('orders/order/pdf.html',context)
      pisa_status = pisa.CreatePDF(source_html,dest=pdf)
      if pisa_status.err:
          return HttpResponse('We had some errors <pre>' + html + '</pre>')
      return response

我的工作:

订单应用中的views.py

import xhtml2pdf
from xhtml2pdf import pisa


def admin_order_pdf(request,id=order_id)
      context = {'order': order}
      response = HttpResponse(content_type='application/pdf')
      response['Content-disposition'] = f'filename=order_{order.id}.pdf'
      template = get_template(template_path)
      html = render_to_string('orders/order/pdf.html',context)
      pdf = open('order.pdf',"w+b")
      #creating the pdf
      pisa_status = pisa.CreatePDF(html,dest=response)
      if pisa_status.err:
          return HttpResponse('We had some errors <pre>' + html + '</pre>')
      return response

解决方法

我已经使用 xhtml2pdf 一段时间了,使用它没有任何问题。你也可以试一试!

您可以使用 pip(Python 包索引)命令安装它:###

pip install xhtml2pdf

git fetch

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。