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 的客户端解决方案,用于在客户 ...
随机推荐
- C++ TinyXml操作(含源码下载)
前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析X ...
- VSS Get Latest Version 没有提示recursive的对话框解决
今天按照VSS使用时,当“Get Latest version”时,不小心勾选了 “Only show this dialog when the Shift key is down”,因此当我再“Ge ...
- Android Back Home键监听
Android Back Home键监听 Back键的监听 对于Back键的监听比较容易,可以在多个系统回调处拦截,比如在activity的下列方法中都可以收到Back键按下的事件: @Overrid ...
- Chapter 4. Using the Gradle Command-Line 使用gradle命令行
This chapter introduces the basics of the Gradle command-line. You run a build using the gradle comm ...
- NYOJ 1091 超大01背包(折半枚举)
这道题乍一看是普通的01背包,最最基础的,但是仔细一看数据,发现普通的根本没法做,仔细观察数组发现n比较小,利用这个特点将它划分为前半部分和后半部分这样就好了,当时在网上找题解,找不到,后来在挑战程序 ...
- codevs 2800 送外卖(状压dp)
/* f[i][j] 表示走过的点构成i状态 且最后到达的点为j时的最优解 在那最后一个状态就是(1<<n+1)-1 每个点都到达 在由此回到0 */ #include<iostre ...
- 网页JavaScript4
表单验证:一.非空验证:1.内容是不是空的.判断值的长度是不是0.length属性.压缩空格的函数. 2.内容是不是改变了. 二.对比验证:1.验证两个控件值的关系(相同,大小) 2.验证控件的值与某 ...
- Cacti安装教程
CentOS 6.0架设流量监控及集中日志系统 第一章.cacti的安装 1. 系统的基本设置2. 设置主机名3. [root@localhost ~]# vi /etc/sysconfig/netw ...
- 在 ASP.NET 网页中不经过回发而实现客户端回调
一.使用回调函数的好处 在 ASP.NET 网页的默认模型中,用户会与页交互,单击按钮或执行导致回发的一些其他操作.此时将重新创建页及其控件,并在服务器上运行页代码,且新版本的页被呈现到浏览器.但是, ...
- PHP HTTP
安装 HTTP 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. PHP HTTP 函数 PHP:指示支持该函数的最早的 PHP 版本. 函数 描述 PHP header() 向客户端发送原 ...