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 相关文章推荐
tensorflow实现简单的卷积神经网络
May 24 Python
python操作redis方法总结
Jun 06 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 Python
Python解释器及PyCharm工具安装过程
Feb 26 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
Pycharm常用快捷键总结及配置方法
Nov 14 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
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
详解Angular 4.x Injector
2017/05/04 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
实例Python处理XML文件的方法
2015/08/31 Python
关于Python数据结构中字典的心得
2017/12/04 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
python实现日志按天分割
2019/07/22 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Django Form常用功能及代码示例
2020/10/13 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
执行力心得体会
2013/12/31 职场文书
幼儿教师考核制度
2014/01/25 职场文书
《问银河》教学反思
2014/02/19 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
初一年级组工作总结
2015/08/12 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书