Python实现将HTML转成PDF的方法分析


Posted in Python onMay 04, 2019

本文实例讲述了Python实现将HTML转成PDF的方法。分享给大家供大家参考,具体如下:

主要使用的是wkhtmltopdf的Python封装——pdfkit

安装

1. Install python-pdfkit:

$ pip install pdfkit

2. Install wkhtmltopdf:

  • Debian/Ubuntu:
$ sudo apt-get install wkhtmltopdf
  • Redhat/CentOS
sudo yum intsall wkhtmltopdf
  • MacOS
brew install Caskroom/cask/wkhtmltopdf

使用

一个简单的例子:

import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')

你也可以传递一个url或者文件名列表:

pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf')
pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')

也可以传递一个打开的文件:

with open('file.html') as f:
  pdfkit.from_file(f, 'out.pdf')

如果你想对生成的PDF作进一步处理, 你可以将其读取到一个变量中:

# 设置输出文件为False,将结果赋给一个变量
pdf = pdfkit.from_url('http://google.com', False)

你可以制定所有的 wkhtmltopdf 选项 <http://wkhtmltopdf.org/usage/wkhtmltopdf.txt>. 你可以移除选项名字前面的 '--' .如果选项没有值, 使用None, Falseor * 作为字典值:

options = {
    'page-size': 'Letter',
    'margin-top': '0.75in',
    'margin-right': '0.75in',
    'margin-bottom': '0.75in',
    'margin-left': '0.75in',
    'encoding': "UTF-8",
    'no-outline': None
  }
  pdfkit.from_url('http://google.com', 'out.pdf', options=options)

默认情况下, PDFKit 将会显示所有的 wkhtmltopdf 输出. 如果你不想看到这些信息,你需要传递一个 quiet 选项:

options = {
    'quiet': ''
    }
  pdfkit.from_url('google.com', 'out.pdf', options=options)

由于wkhtmltopdf的命令语法 , TOC 和 Cover 选项必须分开指定:

toc = {
    'xsl-style-sheet': 'toc.xsl'
  }
  cover = 'cover.html'
  pdfkit.from_file('file.html', options=options, toc=toc, cover=cover)

当你转换文件、或字符串的时候,你可以通过css选项指定扩展的 CSS 文件。

# 单个 CSS 文件
  css = 'example.css'
  pdfkit.from_file('file.html', options=options, css=css)
  # Multiple CSS files
  css = ['example.css', 'example2.css']
  pdfkit.from_file('file.html', options=options, css=css)

你也可以通过你的HTML中的meta tags传递任意选项:

body = """
    <html>
     <head>
      <meta name="pdfkit-page-size" content="Legal"/>
      <meta name="pdfkit-orientation" content="Landscape"/>
     </head>
     Hello World!
     </html>
    """
  pdfkit.from_string(body, 'out.pdf') #with --page-size=Legal and --orientation=Landscape

配置

每个API调用都有一个可选的参数。这应该是pdfkit.configuration()API 调用的一个实例. 采用configuration 选项作为初始化参数。可用的选项有:

  • wkhtmltopdf ——wkhtmltopdf二进制文件所在的位置。默认情况下pdfkit 会尝试使用which (在类UNIX系统中) 或 where (在Windows系统中)来判断.
  • meta_tag_prefix -- pdfkit的前缀指定 meta tags(元标签) - 默认情况是pdfkit-

示例 :针对wkhtmltopdf不在系统路径中(不在$PATH里面):

config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf'))
pdfkit.from_string(html_string, output_file, configuration=config)

问题

  • IOError: 'No wkhtmltopdf executable found':

确保 wkhtmltopdf 在你的系统路径中($PATH), 会通过 configuration进行了配置 (详情看上文描述)。 在Windows系统中使用where wkhtmltopdf命令 或 在 linux系统中使用 which wkhtmltopdf 会返回 wkhtmltopdf二进制可执行文件所在的确切位置.

  • IOError: 'Command Failed'

如果出现这个错误意味着 PDFKit不能处理一个输入。你可以尝试直接在错误信息后面直接运行一个命令来查看是什么导致了这个错误 (某些版本的 wkhtmltopdf会因为段错误导致处理失败)

  • 正常生成,但是出现中文乱码

确保两项:

1)、你的系统中有中文字体

2)、在html中加入<meta charset="UTF-8">

下面是我随便写的一个HTML表格:

<html>
<head><meta charset="UTF-8"></head>
<body>
<table width="400" border="1">
 <tr>
 <th align="left">Item....</th>
 <th align="right">1</th>
 </tr>
 <tr>
 <td align="left">衣服</td>
 <td align="right">$241.10</td>
 </tr>
 <tr>
 <td align="left">化妆品</td>
 <td align="right">$30.00</td>
 </tr>
 <tr>
 <td align="left">食物</td>
 <td align="right">$730.40</td>
 </tr>
 <tr>
 <th align="left">tOTAL</th>
 <th align="right">$1001.50</th>
 </tr>
</table>
</body>
</html>

下面是生成的PDF截图

Python实现将HTML转成PDF的方法分析

另:https://pdfcrowd.com/#convert_by_input

更多Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python中使用matplotlib模块绘制数据图的示例
May 04 Python
Python查找函数f(x)=0根的解决方法
May 07 Python
浅谈Python中函数的参数传递
Jun 21 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Pycharm学习教程(1) 定制外观
May 02 Python
python实现杨辉三角思路
Jul 14 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
使用Python制作一个打字训练小工具
Oct 01 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 Python
Pillow图像处理库安装及使用
Apr 12 Python
Python第三方库face_recognition在windows上的安装过程
May 03 #Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 #Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 #Python
利用python将图片版PDF转文字版PDF
May 03 #Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 #Python
Python Flask框架模板操作实例分析
May 03 #Python
Python Flask框架扩展操作示例
May 03 #Python
You might like
一个简单的PHP&amp;MYSQL留言板源码
2020/07/19 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
mysql总结之explain
2012/02/27 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
node网页分段渲染详解
2016/09/05 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
Python 匹配任意字符(包括换行符)的正则表达式写法
2009/10/29 Python
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
环境工程专业自荐信范文
2014/03/18 职场文书
秋天的雨教学反思
2014/04/27 职场文书
超市商业计划书
2014/05/04 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
查摆问题整改措施
2014/10/24 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python