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 上面有一个很好的例子(本来想引用的,不过人家有版权,呵呵)

最后,本人刚刚学着写文档,经验不足。如果语言不同或者有歧义的地方,还望大家指正!^_^!


本文标签: 打印 生成 对象 参数 使用