使用pdfkit

时间:2018-03-10 14:47:50

标签: python pdfkit

我需要将一个页面呈现为包含材质图标的PDF文件,但它似乎无法正常工作。

模板/ pdf.html

<html>
<head>
  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
  <link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.indigo-pink.min.css">
  <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">

  <style>
    * {
      font-family: Roboto, Helvetica, sans-serif;
    }
</style>
</head>
<body>
  Just test 
  <i class="material-icons">remove_red_eye</i>
</body>
</html>

gen.py

import pdfkit
from django.template.loader import render_to_string

html = render_to_string('pdf.html')
pdfkit.from_string(html, 'out.pdf')
# I tried this version but it doesn't work either
# pdfkit.from_string(html, 'out.pdf', css=['https://fonts.googleapis.com/icon?family=Material+Icons'])

out.pdf仅包含文字Just test。有没有机会解决它?

我刚刚在pdfkit repo中创建了这个问题 - issue

1 个答案:

答案 0 :(得分:1)

有两个问题需要解决,我以可接受的方式完成了这项工作。

  1. CSS。

    • inline styles有效。外部风格不起作用。

    • Wkhtmltopdf支持-webkit-前缀,因此某些css属性需要添加前缀才能正常工作。

    • 如果需要,下载外部css文件。在django模板中使用<style>{% include 'style.css' %}</style>分隔出css文件。

  2. 图标字体和自定义字体不起作用。

    • 下载所需的svg图标,而不是使用图标字体。
      

    一个。使用{% include 'icon.svg' %}包含字体图标

         

    湾仅支持svg xml中的pathfill元素

         

    ℃。你可以改变svg xml内容中svg的颜色和高度。

         

    d。在Material Icon下载svgs

         

    即你可以改用图标的颜色和大小来代替png。

    • 使用系统字体或在服务实例中手动安装字体。