需求描述:
某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成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 ...
-
在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 的客户端解决方案,用于在客户 ...
-
后端队列生成pdf,发送到邮箱
最开始可以先将你想要的pdf模板写好先,如testPage <!DOCTYPE html> <html> <head> <meta http-equiv=&q ...
随机推荐
-
&#39;ModelOptions&#39; object has no attribute &#39;get_field_names
peewee安装时随意了点.装了2.8.0的. 倒回到2.6.0就好了. sudo pip uninstall peewee sudo pip install peewee==2.6.0
-
Linux zip解压/压缩并指定目录
方法如下: 压缩并指定目录举例:zip -r /home/kms/kms.zip /home/kms/server/kms 解压并指定目录 举例:unzip /home/kms/kms.zip -d ...
-
jquery ajax对特殊字符进行转义防止js注入使用示例
在使用ajax进行留言的时候,出现了一个问题.因为留言内容写完之后,通过ajax提交内容,同时使用js把留言的内容添加到页面上来.浏览留言的时候也是通过ajax请求,然后再显示的.这样,如果有人在留言 ...
-
CSS设置浏览器滚动条样式
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 5px; height: 110px; background-color: #F5 ...
-
灵雀云率先成为 Linux 基金会/CNCF官方认证培训合作伙伴
近日,灵雀云Alauda成为Linux基金会/CNCF授权培训伙伴项目( Linux Foundation Authorized Training Partner Program,以下简称ATP)在国 ...
-
创建自己的共用js库
直至昨晚为止,学习了一个多月的MVC与jQuery,从所做的练习中,发觉jQuery的代码也有跟C#语言一样可以重构,多页面有相同使用的方法函数,均可以放置于一个单独立的js文件或是自定义的js库中. ...
-
HDFS--大数据应用的基石
近些年,由于智能手机的迅速普及推动移动互联网技术的蓬勃发展,全球数据呈现爆发式的增长.2018年5月企鹅号的统计结果:互联网每天新增的数据量达2.5*10^18字节,而全球90%的数据都是在过去的两年 ...
-
DTCping 的简单使用与排错
1. 工具下载路径 https://support.microsoft.com/zh-cn/help/918331/how-to-troubleshoot-connectivity-issues-in ...
-
WPF与Winform中的不同(1)
1. 部分控件的Text属性,变成了 Content属性 如: winform中,Button.Text = "abc"; wpf中,Button.Content = " ...
-
[POI2010]Beads
题目大意: 给定一个长度为$n(n\leq200000)$的串$S_{1\sim n}$,选择一个$l$,从$S_1$开始,将$S$分为连续的若干段,使得每一段长度为$l$.令$k$为分出来不同的子串 ...