Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 那么';不要使用weasyprint什么是最好的方法?_Python_Django_Pdf_Weasyprint_Pylatex - Fatal编程技术网

Python 那么';不要使用weasyprint什么是最好的方法?

Python 那么';不要使用weasyprint什么是最好的方法?,python,django,pdf,weasyprint,pylatex,Python,Django,Pdf,Weasyprint,Pylatex,提前谢谢。 我正在尝试将django项目加载到服务器上。我意识到我无法为weasyrprint更新Cairo。我想把代码改成别的东西。我在想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_str

提前谢谢。 我正在尝试将django项目加载到服务器上。我意识到我无法为weasyrprint更新Cairo。我想把代码改成别的东西。我在想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
在my payment 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>

妈妈和爸爸

发票编号{order.id}
{order.created}日期:“md,Y”}

帐单 {{order.first_name}}{{order.last_name}}
{{order.email}}
{{order.address}}
{{order.posal{u code},{{order.city}

购买的物品 产品 价格 量 成本 {order.items.all%中的项目的%s} {{item.product.name} ${{item.price}} {{item.quantity}} ${{item.get_cost} {%endfor%} 全部的 ${{order.get_total_cost} {%if order.paid%}已付款{%else%}待付款{%endif%}
在路易斯的帮助下,这就是我想到的。它将无法加载,但我可以创建测试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
@职员\成员\必需
def管理订单pdf(请求、订单id):
模板路径='orders/order/pdf.html'
订单=获取对象或404(订单,id=订单id)
pdf=open('order.pdf',“w+b”)
上下文={'order':order}
response=HttpResponse(content\u type='application/pdf')
响应['Content-Disposition']=f'filename=order_{order.id}.pdf'
模板=获取模板(模板路径)
source\u html=render\u to\u字符串('orders/order/pdf.html',上下文)
pisa_status=pisa.CreatePDF(源html,目标=pdf)
如果pisa_status.err:
返回HttpResponse('我们有一些错误'+html+'')
import xhtml2pdf
from xhtml2pdf import pisa


def admin_order_pdf(request, order_id):
      template_path = 'orders/order/pdf.html'
      order = get_object_or_404(Order, 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
返回响应
我的工作重点是:

订单应用程序中的views.py

@staff_member_required
def admin_order_pdf(request, order_id):
    order = get_object_or_404(Order, id=order_id)
    pdf = open('order.pdf', "w+b")
    context = {'order': order}
    source_html = render_to_string('pdf.html', context)
    pisa.CreatePDF(source_html, dest=pdf)
导入xhtml2pdf
从xhtml2pdf导入pisa
def管理订单pdf(请求、订单id):
模板路径='orders/order/pdf.html'
订单=获取对象或404(订单,id=订单id)
上下文={'order':order}
response=HttpResponse(content\u type='application/pdf')
响应['Content-Disposition']=f'filename=order_{order.id}.pdf'
模板=获取模板(模板路径)
html=呈现为字符串('orders/order/pdf.html',上下文)
pdf=open('order.pdf',“w+b”)
#创建pdf
pisa_status=pisa.CreatePDF(html,dest=response)
如果pisa_status.err:
返回HttpResponse('我们有一些错误'+html+'')
import xhtml2pdf
from xhtml2pdf import pisa


def admin_order_pdf(request, order_id):
      template_path = 'orders/order/pdf.html'
      order = get_object_or_404(Order, 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安装xhtml2pdf


所以我通过cmd获得了测试脚本。这意味着我的脚本有错误。我把它添加到原来的帖子中,因为我不知道如何添加到这一行。你看到错误了吗?顺便谢谢你的帮助。请放心,我还在努力。谢谢。谢谢,我开始工作并编辑了我的帖子来展示我是如何做到的。您是对的,但关键是源HTML中的上下文需要响应。谢谢你的帮助。很抱歉回答晚了。我很高兴这有帮助!如果你需要任何其他帮助,请告诉我。