使用nightmarejs将HTML转换为pdf的django实现
项目描述
django-nightmare-pdf
使用nightmare将HTML转换为pdf
要求
Python (2.7)(需要为3.x进行测试)
Django (1.10, 1.9)(需要为早期版本进行测试)
依赖关系
此django应用程序依赖于Nightmare,您需要先使用npm安装它
npm install nightmare
安装
使用pip安装
pip install nightmare_pdf
将nightmare_pdf添加到您的INSTALLED_APPS设置中。
INSTALLED_APPS = (
...
'nightmare_pdf',
)
创建一个目录以保存Nightmare创建的pdf文件,默认为pdf_temp
mkdir pdf_temp
示例
从URL生成pdf并将其保存到数据库中,或将其作为ContentFile检索,或将其返回在HttpResponse中
from nightmare_pdf.generators import PDFGenerator
pdf = PDFGenerator(url="https://github.com/charlesthk/django-nightmare-pdf",
# Save it to database and retrieve a PdfDoc Object (database):
pdf.save(
filename='nightmare_pdf',
title="nightmare_pdf on github",
description="Convert HTML to pdf with django using nightmare")
# Get the PDf as a Django ContentFile named 'my_pdf_file.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')
PDFGenerator选项
PDFGenerator类接受以下参数
url [必需]
timeout [可选] 默认为1000,定义了nightmare打开和渲染url之间的超时时间
page_size [可选] 默认为 'A4',接受选项为 A3, A4, A5, Legal, Letter 或 Tabloid
landscape [可选] 默认为 0,定义是否以横幅模式渲染 PDF
print_background [可选] 默认为 1,定义是否打印背景
margins_type [可选] 默认为 1,定义使用哪种边距。使用 0 为默认边距,1 为无边距,2 为最小边距。
script [可选] 默认为 DEFAULT_RENDER_SCRIPT,定义使用哪个渲染脚本。
temp_dir [可选] 默认为 DEFAULT_TEMP_DIR,定义使用哪个临时目录。
用于保存 PDF 的模型
当使用 save(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 设置文件中。默认设置为
NIGHTMARE_PDF = {
'UPLOAD_TO': 'pdfs',
'NODE_PATH': 'node',
'DEFAULT_RENDER_SCRIPT': os.path.join(NIGHTMARE_PDF_DIR, 'render_pdf.js'),
'DEFAULT_TEMP_DIR': os.path.join(settings.BASE_DIR, 'pdf_temp')
}
UPLOAD_TO
定义保存 PDF 时使用的目录或函数,默认为 pdfs。
NODE_PATH
定义 Node 二进制的路径,默认为 node。
DEFAULT_RENDER_SCRIPT
定义默认使用的 render_script,默认为包内的 render_pdf.js。
DEFAULT_TEMP_DIR
定义 Nightmare 生成临时 PDF 使用的目录,默认为 pdf_temp。
支持
如果您遇到问题,请告诉我们或提交一个 pull request。
许可证
该项目受 MIT 许可证许可。