说起pdf就想到了一款很适用的工具,那就是pdfkit,在前几天的项目中,有一个功能要实现,为了实现这一个功能,于是我大海茫茫中查询各种百科,不负众望的让我找到了我心怡的工具,想必也就是它了。好了废话也不多说了,开始进入高潮部分吧~~~

  1、说明

    pdfkit,把HTML·+ CSS格式的文件转换成PDF格式文档的一种工具。

    其实,它就是html转换成PDF工具包wkhtmltopdf的Python封装,所以,必须安装wkhtmktopdf。一般情况下,wkhtmkltopdf需要手动安装,尤其要注意的是Windows下,需要把wkhtmltopdf的bin执行文件路径添加到PATH变量中。

  2、安装

    请参考《Python抓取网页并保存为PDF》里面各个安装包的安装

  3、API说明   

def from_url(url, output_path, options=None, toc=None, cover=None, configuration=None, cover_first=False):
"""
把从URL获取文件转换为PDF文件 :param url:
URL 或 URL列表
:参数,output_path:
输出PDF文件的路径。如果是参数等于False,意味着文件将会以字符串的形式返回,得到文本文件。
:param options:
(可选) dict with wkhtmltopdf global and page options, with or w/o '--'
:param toc:
(可选) dict with toc-specific wkhtmltopdf options, with or w/o '--'
:param cover:
(可选) string with url/filename with a cover html page
:param configuration:
(可选)实例化 pdfkit.configuration.Configuration()
:param configuration_first:
(optional) if True, cover always precedes TOC 返回值:成功返回True
"""
r = PDFKit(url, 'url', options=options, toc=toc, cover=cover,configuration=configuration, cover_first=cover_first)
return r.to_pdf(output_path)
def from_file(input, output_path, options=None, toc=None, cover=None, css=None, configuration=None, cover_first=False):
"""
Convert HTML file or files to PDF document
:param input:
path to HTML file or list with paths or file-like object
:param output_path:
path to output PDF file. False means file will be returned as string.
:param options:
(optional) dict with wkhtmltopdf options, with or w/o '--'
:param toc:
(optional) dict with toc-specific wkhtmltopdf options, with or w/o '--'
:param cover:
(optional) string with url/filename with a cover html page
:param css:
(optional) string with path to css file which will be added to a single input file
:param configuration:
(optional) instance of pdfkit.configuration.Configuration()
:param configuration_first:
(optional) if True, cover always precedes TOC
Returns: True on success
"""
r = PDFKit(input, 'file', options=options, toc=toc, cover=cover, css=css, configuration=configuration, cover_first=cover_first)
return r.to_pdf(output_path)

  

def from_string(input, output_path, options=None, toc=None, cover=None, css=None, configuration=None, cover_first=False):
"""
Convert given string or strings to PDF document
:param input: string with a desired text. Could be a raw text or a html file
:param output_path: path to output PDF file. False means file will be returned as string.
:param options: (optional) dict with wkhtmltopdf options, with or w/o '--'
:param toc: (optional) dict with toc-specific wkhtmltopdf options, with or w/o '--'
:param cover: (optional) string with url/filename with a cover html page
:param css: (optional) string with path to css file which will be added to a input string
:param configuration: (optional) instance of pdfkit.configuration.Configuration()
:param configuration_first: (optional) if True, cover always precedes TOC
Returns: True on success
""" r = PDFKit(input, 'string', options=options, toc=toc, cover=cover, css=css, configuration=configuration, cover_first=cover_first) return r.to_pdf(output_path)

 

   4、举例说明

   4.1 简单的例子    

import pdfkit 

pdfkit.from_url('https://www.google.com.hk','out1.pdf')
pdfkit.from_file('123.html','out2.pdf')
pdfkit.from_string('Hello!','out3.pdf')

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

pdfkit.from_url(['https://www.google.com.hk','https://baidu.com','http://cn.bing.com/'],'out_0.pdf')
pdfkit.from_file(['122.html','123.html'],'out_1.pdf')

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

pdf=pdfkit.from_url('https://www.google.com.hk',False)

  你可以指定所有的 wkhtmltopdf选项 。你可以移除选项名字前面的 ‘–’ .如果选项没有值, 使用None, False或者“*”作为字典值:

在views视图中可以加上options进行页面布局调试 

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('https://www.google.com.hk','out1.pdf',options=options)

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

options = {'quiet':''}
pdfkit.from_url('https://www.google.com.hk','out1.pdf',options=options)

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

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

   当你转换文件、或字符串的时候,你可以通过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)

  配置 
       每个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)

配置文件路劲是你当时下载wkhtmltopdf安装的路径,然后把它加入在里面,''out.pdf''可以更改名字,属于pdf文件名。

config = pdfkit.configuration(wkhtmltopdf='C:\\Python27\\wkhtmltopdf\bin\\wkhtmltopdf.exe')
pdfkit.from_url('http://google.com', 'out.pdf')

为了在前端一点击生成pdf下面就是显示pdf文件直接点击查看

#pdf版本导入
def html_str(html_str):
import pdfkit
print "in export pdf"
options = {
'page-size': 'A3',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'no-outline': None
}
# css = {}
config = pdfkit.configuration(wkhtmltopdf='D:\\pdf\\wkhtmltopdf\\bin\\wkhtmltopdf.exe')
file = pdfkit.from_string(html_str, False, options=options, configuration=config)#字符串方式
return file

里面还运用到了django 模板渲染功能,如果是使用字符串方式的话,可以使用这个方法,简单方便。。。。

#pdf调用方式
def export_pdf(request, pk):
quotation_id = pk
t = TemplateResponse(request, 'quotation.html', locals())
t.render()
# print t.content
file = html_str(t.content)
response = StreamingHttpResponse(file)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="product.pdf"'
return response  

 ps:

  win7 64位系统下,

  第一步:

  下载下面链接中

  https://wkhtmltopdf.org/downloads.html

Windows (MinGW)	0.12.4	32-bit / 64-bit	for Windows XP/2003 or later; standalone
pip install pdfkit    

  安装到路径:

  D:\software\wkhtmltopdf

    打开控制面板

    系统变量Path中加入

  D:\software\wkhtmltopdf\bin

    与其他路径用";"隔开  

  

PDF之pdfkit的更多相关文章

  1. pdfkit html转pdf

    pdfkit的通用option选项 参考:https://cloud.tencent.com/developer/ask/202116https://www.cnblogs.com/taceywong ...

  2. 爬取博主的所有文章并保存为PDF文件

    继续改进上一个项目,上次我们爬取了所有文章,但是保存为TXT文件,查看不方便,而且还无法保存文章中的代码和图片. 所以这次保存为PDF文件,方便查看. 需要的工具: 1.wkhtmltopdf安装包, ...

  3. 学以致用:Python爬取廖大Python教程制作pdf

    当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个想法. 想要把教程变成PDF有三步: 先生成空html,爬取每一篇教程放进一个新生成的div,这样就 ...

  4. 导出 VuePress构建的网站为 PDF

    前言 学 Rust 也有一段时间了,网上也有不少官方文档的中文翻译版,但是似乎只有 Rust中文网站 文档一直是最新的,奈何并没有 PDF 供直接下载,是在是不太方便,为了方便阅读以及方便后续文档更新 ...

  5. Python将HTML转换为PDF

    Python将HTML转换为PDF 使用pdfkit库和wkhtmltopdf, pip install pdfkit wkhtmltopdflinux中一般需要添加sudo权限. Windows安装 ...

  6. pdfkit

    官方文档 0.准备 需要引入两个包,首先要npm install pdfkit安装pdfkit包 const PDF = require('pdfkit'); const fs = require(' ...

  7. python 爬虫,网页转PDF:OSError: No wkhtmltopdf executable found

    解决办法: 代码中设置参数: path_wk = r‘D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe‘ #wkhtmltopdf安装位置 config ...

  8. 常用的NodeJS模块

    图片处理 1.Manipulate images 官网:http://github.com/aheckmann/gm ImageMagick和GraphicsMagick主要用于图片的创建.编辑.合成 ...

  9. Python之数据处理

    一.CSV数据处理 CSV文件格式:逗号分隔值(Comma-Separated Value,CSV,有时也称为字符分隔值,因为分隔符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文 ...

随机推荐

  1. VMware静态地址上网

    虚拟机通过dhcp获取ip,当系统重启时可能导致ip变更,出现不必要的麻烦,以下是通过nat模式设置虚拟机静态ip同时能够上网的方式. 编辑VMware,依次点击“编辑”--“虚拟网络编辑器” 注:为 ...

  2. TypeScript入门(一)

    TypeScript是微软官方的一种语言,是JavaScript的超集.它遵循的ECMA Script 6.0是下一代的JavaScript.浏览器还没有完全支持ES6,而ES5是弱类型的语言,还没有 ...

  3. Flyway--数据库版本管理和控制工具

    1. Flyway 的主要任务是管理数据库的版本更新,在Flyway 中称每次数据库更新为一个migration ,为了更顺口,我们下面称之为数据库脚本.Flyway 支持SQL-based migr ...

  4. ELK学习笔记(二)-HelloWorld实例+Kibana介绍

    这次我们通过一个最简单的HelloWolrd来了解一下ELK的使用. 进入logstash的config目录,创建stdin.conf 文件. input{ stdin{ } } output{ st ...

  5. 怎样把Linux的私钥文件id_rsa转换成putty的ppk格式

    在Linux VPS下产生的私钥文件putty是不认识的,putty只认识自己的ppk格式,要在这两种格式之间转换,需要PuTTYgen这个程序. puttygen是putty的配套程序,putty的 ...

  6. 深入理解Android中View

    文章目录   [隐藏] 一.View是什么? 二.View创建的一个概述: 三.View的标志(Flag)系统 四.MeasureSpec 五.几个重要方法简介 5.1 onFinishInflate ...

  7. RPC原理解析

    1.RPC原理解析 1.1 什么是RPC RPC(Remote Procedure Call Protocol) --远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络 ...

  8. 听翁恺老师mooc笔记(3)--指针的定义

    在上一个blog学习了&运算符,使用&取了变量.数组等地址,有什么用那?如果能够将取得的变量的地址传递给函数,能否通过这个地址在函数内访问到外部这个变量?答案是肯定的,scanf(&q ...

  9. 敏捷冲刺每日报告——Day1

    1.情况简述 Alpha阶段第一次Scrum Meeting 敏捷开发起止时间 2017.10.25 00:00 -- 2017.10.26 00:00 讨论时间地点 2017.10.25晚9:30, ...

  10. raid5 阵列硬盘离线数据恢复成功案例

    数据恢复故障描述: 某研究院 DELL 磁盘阵列崩溃,内置15块1TB硬盘搭建的RAID5阵列.一开始有一块硬盘离线,在更换新硬盘进行同步的过程中,第二块磁盘指示灯报警,同步失败,阵列无法正常工作. ...