admin 管理员组文章数量: 1087139
2024年4月23日发(作者:自己的己组词一年级简单)
Flex中利用AdlivePDF生成PDF
在Flex中实现生成打印,对于开发人员,向来是一个比较头疼的问题,由于Actionscript3本身对打印的支持不
是非常到位,要做到不依赖于外部程序,不需要额外安装程序的话,开发者需要做非常多的工作。
如果需要打印,不仅操作打印的步骤比较繁琐,而且,打印出来的内容由于都装换成了位图,也会导致打印过程
中产生一些失真的情况。目前已经有一种解决方案,就是使用AlivePDF库,则可以将文字,图片甚至矢量图绘制到PDF
文档中去,生成打印的PDF。
AlivePDF是一个ActionScript 3 写的开源PDF开发包, 基于FPDF编写的。AlivePDF支持应用程序桌面打印,打
印Grid,功能完整,支持中文,所要的功能基本实现,在RIA和AIR中都可以执行。但AlivePDF对中文支持不过完整,
会出现文字错误问题,目前正在完善当中。不支持高级表格打印,重写源码可以实现。打印图片不够清晰。字体样式单
一。字体打印单一。
AlivePDF的使用非常简单易懂。
AlivePDF有两种PDF生成模式。
1, 在服务器生成
服务器远程生成的机制是为了兼容Flash Player9,因为Flash player9 的用户无法直接保存文件到本地,
需要服务器生成后下载文件,如果你的目标是Flash Player10,则不需要远程服务器生成。
2, 在本地直接生成。
AlivePDF的使用步骤:
下面是一个例子:
/**
* 创建PDF对象,设置其详细参数
是横向,PORTRAIT是纵向
* 第一个参数是方向,LANDSCAPE
* 第二个参数是一个字符串,相当于一个标题名
* 第三个参数是单位,MM
* 第四个参数是
*/
是毫米
Size对象
var myPDF:PDF = new PDF(APE, ,Size.A4);
playMode(_PAGE); //显示方式,设置为完全显示
e(); //加入到当前页面
ge(this,0,0,0,0,); //截取软件界面并以JPF
格式插入新增页中
/**
* 生成PDF
PDF,一般是REMOTE服务端生成
是附件,INLINE是在浏览器中打开
* 第一个参数是指定采用什么方式生成
* 第二个参数是服务器地址
* 第三个参数是打开方式,ATTACHMENT
* 第四个参数是生成的
*/
PDF文件名
(,
"server:port/appName/createpdf",MENT,
"");
1
var myPDF:PDF = new PDF( APE, , Size.A4 ); ○
这行代码创建一个PDF对像,使用A4纸张,单位是毫米,A4纸张横向放置。
如果选择IT则是纸张纵向使用
Unit有4个变量,CM厘米,INCHES英寸,MM毫米,POINT是针式打印机每针之间的距离。
2
playMode ( _PAGE); ○
由于在PDF中绘制是矢量,我们需要指明其缩放模式,这里是完全显示。
3
e(); ○
在PDF中添加一页。我们也可以自己定义一个页面,再添加:
var newPage:Page = new Page ( IT, , Size.A4 );
e(newPage);
4
ge(this,0,0,0,0,) ; ○
ImageFormat有两种格式文件JPG和PNG。addImage方法,不仅可以保存当前页面,也可以保存单个控件,比
如datagrid,只要指定了控件的id,ge()。
5
○(,"HTTP://server:port/appName/createpdf",MENT,
"") ;
如果你担心你的发布人群中,大家都在使用Flashplayer9,则可以发布为远程生成模式。alivepdf附带了php
的代码以及java的代码还有C#代码的服务端代码。直接上传至服务器即可。
如果你使用AIR,则可以直接在本地保存:
var f:FileStream = new FileStream();
file = ePath('pdf/');
( file, ); var bytes:ByteArray = ();
ytes(bytes);();
AlivePDF打印中文会出现问题:
由于AlivePDF不支持中文字体,所以所有中文均无法正常显示,但是可以通过将文本显示在软件中文本类控件,然
后截取其图片以PNG格式输出到PDF文档的办法来进行变通。但这样做的缺点是文本以图片形式输出后将无法复制粘贴
等编辑操作。下面是一个例子,和上面例子差不多,只是多了几步:
//canvas是id,这是获得整个画布内容的快照,返回的是一个位图
var bmp:BitmapData = eBitmapData(canvas);
var bitmap:Bitmap = new Bitmap(bmp); //将位图转换为显示对象
/**
* 在创建PDF对象之前,设置Size对象的详细参数
* 第一个参数是图像大小数组(width,height),这里给它设定原始图片大小
* 第二个参数是一个字符串,相当于一个标题名
* 第三个参数是尺寸,英寸数组(width,height)
* 第四个参数是尺寸,毫米数组(width,height)
*/
var autoSize:Size=new Size([,],
"Tabloid",[11, 17],[279, 432]);
var myPDF:PDF = new PDF(APE, ,autoSize);
playMode(_PAGE);
e(); //加入到当前页面
ge(bitmap); //把要导出的显示对象加入进来
(...);
官方例子中,是没有实例化Size对象,并对它进行参数设置的,而且使用的是固定设置,它有几个预定义好的静态
构造对象,可以直接使用。之所以这里要自己定义,是因为如果采用预定义的设置,导出的图像不清晰。特别是第一
个参数,如果你准备导出的尺寸不符合预定义设置的话,最好改成自己想要导出的对象尺寸,这样效果要好一些,另
外比较重要的就是第三和第四个参数,一个是英寸一个是毫米。如果导出的图像比较大,这两组值设定的比较小的话,
当缩小看时,会很模糊。
结束语:
AlivePDF开发包使用的例子在网上很多,在此我推荐几个网址:
/ alivePDF官网,上面有很多例子
/tag 中文Flex例子,楼主是一个很强的人
flex交流网站,这个网站我比较喜欢,我是网站的会员
/p/alivepdf 谷歌开源网站
/topic/689495 上面有一个很好的例子(本来想引用的,不过人家有版权,呵呵)
最后,本人刚刚学着写文档,经验不足。如果语言不同或者有歧义的地方,还望大家指正!^_^!
版权声明:本文标题:AlivePDF生成pdf技术文档 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1713854443a654612.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论