• 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

        与其他路径用";"隔开  

      

  • 相关阅读:
    Vasya and Endless Credits CodeForces
    Dreamoon and Strings CodeForces
    Online Meeting CodeForces
    数塔取数 基础dp
    1001 数组中和等于K的数对 1090 3个数和为0
    1091 线段的重叠
    51nod 最小周长
    走格子 51nod
    1289 大鱼吃小鱼
    POJ 1979 Red and Black
  • 原文地址:https://www.cnblogs.com/niejinmei/p/8157680.html
Copyright © 2020-2023  润新知