Django中生成PDF(一)
需求描述:
某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档。PDF文件中需要有企业LOGO、文字描述等信息。其展现形式跟word文件类似,要求排版精美,图文并茂,在接下来的几篇博文中,我将记录整个PDF生成的过程。
技术调研:
首先是通过Django的官方文档找有木有相关的模块,很兴奋又有点失落(模块地址:https://docs.djangoproject.com/en/1.4/howto/outputting-pdf/)。兴奋的是Django考虑周到,为用户提供了生成PDF的模块,失落的是它所提供的不能满足现有的需求。顺藤摸瓜,于是找到了reportlab,发现的确是一个很强大的库,几乎能实现你想要的结果。
项目准备:
通过调研,有三种方式实现PDF的文件生成和保存:
方法一:使用reportlab相关包,用canvas直接画图并保存。这种方法最原始,使用比较麻烦,真对不同的PDF文档需要单独画。另外,还需要详细了解reportlab所提供的API,对于PDF文件中需要画的每一个元素,无论是文字、直线还是图片,都需要自己手动调色、精确定位,操作比较繁琐,且其代码不能够重用,增加了开发成本和维护成本。
方法二:仍然使用reportlab相关包,通过RML(Report Markup Language)来编写需要生成PDF的文件模板(类似于HTML页面),针对不同的报表需求,我们只需要提供不同的报表模板即可,实现好了工具类,直接调用即可,这样比较方便,方便维护。但是前提条件是必须要熟悉并了解RML语言。
方法三:通过HTML直接生成PDF,类似于方法二,都是通过样式,数据,先渲染好模板,再生成PDF文件。
个人感觉RML比较专业一点,因为它是专门用来生成报表需求的,且其展现形式比较丰富,小到文本、图片,大到流程图、饼状图、柱状图、曲线图都能展现。
(未完待续,节日快乐)
Django中生成PDF(一)的更多相关文章
- 怎么用PHP在HTML中生成PDF文件
原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PH ...
- Django中生成随机验证码(pillow模块的使用)
Django中生成随机验证码 1.html中a标签的设置 <img src="/get_validcode_img/" alt=""> 2.view ...
- 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档
背景 在计量领域中,计量检定是一种重要形式,主要用于评定计量器具的计量性能,确定其量值是否准确一致,实现手段包括计量检验.出具检定证书和加封盖印等. 在检定证书这一环节,存在一个难点,就是无法在线预览 ...
- 在asp.net 中生成PDF的方法
近期要用asp.net 2.0生成PDF,看了下书,查了下资料,发现可以有组件帮得上忙,可以下载itextsharp(https://sourceforge.net/projects/itextsha ...
- django 动态生成PDF文件
可以通过开源的Python PDF库ReportLab来实现PDF文件的动态生成. 一.安装ReportLab ReportLab库在PyPI上提供,可以使用pip来安装: $ pip install ...
- 使用Rotativa在ASP.NET Core MVC中创建PDF
在本文中,我们将学习如何使用Rotativa.AspNetCore工具从ASP.NET Core中的视图创建PDF.如果您使用ASP.NET MVC,那么Rotativa工具已经可用,我们可以使用 ...
- NET Core MVC中创建PDF
使用Rotativa在ASP.NET Core MVC中创建PDF 在本文中,我们将学习如何使用Rotativa.AspNetCore工具从ASP.NET Core中的视图创建PDF.如果您使用ASP ...
- 使用JSP页面生成PDF报表
转自:http://developer.51cto.com/art/200907/134261.htm 1.iText简介 iText是一个开放源码的Java类库,可以用来方便地生成PDF文件.大家通 ...
- jsPDF生成pdf文件和中文编码
jsPDF的简单使用以及中文编码问题的解决 文中js通过CDN引入,若是为了加载时间最好下载至本地. jsPDF的使用 jsPDF简介 jsPDF 是一个基于 HTML5 的客户端解决方案,用于在客户 ...
随机推荐
- gradle命令
gradle tasks 可以显示gradle可以做的任务. gradle build 就会生成jar包. build和clean install的作用是否一致?
- ASP.NET实现省市区三级联动(局部刷新)
跟前一篇ASP.NET实现年月日三级联动(局部刷新)一样,没什么技术含量,直接上代码 <asp:ScriptManager ID="ScriptManager1" runat ...
- 运维监控利器smokeping 500报错处理
检查apache日志发现有以下错误: No such file or directory: exec of '/usr/local/smokeping/htdocs/smokeping.cgi' fa ...
- Cacti监控Linux主机
1 要监视一台Linux主机,需要在被监控的主机上安装net-snmp相关软件包,CentOS安装可使用“yum -y install net-snmp”命令:# yum -y install net ...
- JavaWeb学习笔记之Servlet(二)
1. GenericServlet 抽象类: 1). 是一个 Serlvet. 是 Servlet 接口和 ServletConfig 接口的实现类. 但是一个抽象类. 其中的 service 方法 ...
- jQuery1.9(辅助函数)学习之——.serializeArray();
.serializeArray();返回一个Array 描述: 将用作提交的表单元素的值编译成拥有name和value对象组成的数组.例如[ { name: a value: 1 }, { name: ...
- linux笔记2.21
命令dmesg显示本次内核启动信息 init是系统运行的第一个进程 Linux运行级别: 0 关机 1 单用户模式 2 不带网络的多用户模式 3 命令行多用户模式 4 未使用 5 ...
- KACK的处理方法
demo: .eq { color:#f00;/*标准浏览器*/ color:#f30\0;/*IE8,IE9,opera*/ *color:#c00;/*IE7及IE6*/ _color:#600; ...
- Linux下部署Symfony2对app/cache和app/logs目录的权限设置
在linux下部署完Symfony2,可能在访问的时候会报app/logs或者app/cache目录没有写权限的错误.在linux下,如果我们在命令行登陆的用户和web应用服务器(apache.ngi ...
- HTTPS 服务器搭建
利用NGINX搭建HTTPS服务器不是一件困难的事情,过程包括以下几步 第一步:利用OpenSSL制作证书 第二步:安装NGINX,configure中保证加入ngx_http_ssl_module. ...