zoukankan      html  css  js  c++  java
  • PDF之pdfkit

      说起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\wkhtmltopdfin\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:softwarewkhtmltopdf

        打开控制面板

        系统变量Path中加入

      D:softwarewkhtmltopdfin

        与其他路径用";"隔开  

      

  • 相关阅读:
    【LeetCode】1248. 统计「优美子数组」
    【LeetCode】200. 岛屿数量
    【LeetCode】53. 最大子序和
    【剑指Offer】面试题42. 连续子数组的最大和
    【剑指Offer】面试题57. 和为s的两个数字
    【LeetCode】55. 跳跃游戏
    【LeetCode】56. 合并区间
    简历HTML网页版
    关于新建Eclipse新建一个WEB项目后创建一个jsp文件头部报错问题?
    jquery选择器 看这个链接吧!2017.6.2
  • 原文地址:https://www.cnblogs.com/niejinmei/p/8157680.html
Copyright © 2011-2022 走看看