使用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 许可证许可。