跳转到主要内容

使用django从HTML生成PDF

项目描述

django-pdf-generator v0.1.3 on PyPi MIT license Stable

django-pdf-generator

使用phantomjs通过django将HTML转换为pdf

要求

  • Python (2.7) (需要测试3.x)

  • Django (1.10, 1.9) (需要测试旧版本)

  • PhantomJS

安装

使用 pip 进行安装

pip install django_pdf_generator

pdf_generator 添加到您的 INSTALLED_APPS 设置。

INSTALLED_APPS = (
    ...
    'pdf_generator',
)

将phantomjs二进制文件放在您的路径上,或者使用 PHANTOMJS_BIN_PATH 设置在您的设置中手动设置路径(见下文)。

示例

使用PDFGenerator类生成PDF

从URL生成pdf

from pdf_generator.generators import PDFGenerator

pdf = PDFGenerator(url="https://github.com/charlesthk/django-pdf-generator",

使用PdfDoc模型将其保存到数据库

pdf.save(
        filename='pdf_generator',
        title="pdf_generator on github",
        description="Convert HTML to pdf with django using phantomjs")

获取名为‘my_pdf_file.pdf’的Django ContentFile作为PDF

pdf_content_file = pdf.get_content_file('my_pdf_file')

# Return a Django HttpResponse with the PDF Attached named 'my_pdf_file.pdf':
return pdf.get_http_response('my_pdf_file')

返回一个名为‘my_pdf_file.pdf’的PDF附件的Django HttpResponse

return pdf.get_http_response('my_pdf_file')

像Django render 函数一样生成pdf

urls.py

url(r'^invoice$', views.invoice, name='invoice'),

views.py

from pdf_generator.renderers import render_pdf

def invoice(request):
    """
    Render an invoice
    The invoice.pdf file is returned
    """
    return render_pdf('invoice', request, 'front/invoice.html')

只需将 ?html=1 添加到URL中,即可查看HTML而不是获取pdf文件。

PDFGenerator选项

PDFGenerator 类接受以下参数

  • url [必需]

  • paperformat [必需] 默认为 'A4',例如:"5in*7.5in","10cm*20cm","A4","Letter"

  • zoom [可选] 默认为 1。

  • script [可选] 默认为 DEFAULT_RASTERIZE_SCRIPT,定义要使用的渲染脚本。

  • temp_dir [可选] 默认为 DEFAULT_TEMP_DIR,定义要使用的临时目录。

用于保存 PDF 的模型

当使用 PDFGeneratorsave(filename, title='', description='') 方法时,使用以下模型

class PdfDoc(models.Model):
    """
    Store each generated pdf
    """
    title = models.CharField(verbose_name=_("Title"), max_length=255, blank=True)
    description = models.TextField(verbose_name=_("Description"), blank=True)
    document = models.FileField(verbose_name=_("Document PDF"), upload_to=pdf_settings.UPLOAD_TO)
    created_at = models.DateTimeField(auto_now=False, auto_now_add=True, verbose_name=_('Creation'))
    updated_at = models.DateTimeField(auto_now=True, auto_now_add=False, verbose_name=_('Update'))

设置

将您的设置添加到主 django 设置文件中。默认设置如下

PDF_GENERATOR = {
    'UPLOAD_TO': 'pdfs',
    'PHANTOMJS_BIN_PATH': 'phantomjs',
    'DEFAULT_RASTERIZE_SCRIPT': os.path.join(PDF_GENERATOR_DIR, 'rasterize.js'),
    'DEFAULT_TEMP_DIR': os.path.join(PDF_GENERATOR_DIR, 'temp'),
    'TEMPLATES_DIR': os.path.join(PDF_GENERATOR_DIR, 'templates/pdf_generator')
}

UPLOAD_TO

定义在保存 PDF 时使用的目录或函数,默认为 pdfs

PHANTOMJS_BIN_PATH

定义 Phantomjs 二进制文件的路径,默认为 phantomjs

DEFAULT_RASTERIZE_SCRIPT

定义默认使用的渲染脚本,默认为包内的 rasterize.js

DEFAULT_TEMP_DIR

定义 PhantomJS 生成临时 PDF 所使用的目录。默认为 pdf_temp

TEMPLATES_DIR

定义 PhantomJS 生成临时 HTML 文件所使用的目录。默认为 pdf_temp

支持

如果您遇到问题,请告知我们或提交一个 pull request。

许可证

该项目采用 MIT 许可证。

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

此版本没有可用的源代码发行版文件。请参阅 生成发行版存档的教程

构建发行版

django_pdf_generator-0.1.3-py2.py3-none-any.whl (12.9 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持