Webgis 打印实现原理

 
Webgis 打印实现原理
褫其华衮,示人本相系列之二
2006-9-18
cheungmine
一、问题的提出
       Webgis提供了客户端免插件的地图浏览机制。任何位于WWW节点内的计算机都可以通过浏览器浏览地图。但是,打印地图成了Webgis遇到的一个问题。客户端如果使用IE的默认打印功能来输出地图,仅仅输出了当前显示的图象到打印机。无论从尺寸和分辨率上都不能满足高精度绘图的需要。如果客户要求输出一定比例尺(如:1/500)的大幅面地图(连续多幅),这就成了Webgis打印的技术壁垒。本文从实用的角度出发,阐述了Webgis打印的实现原理。
 
二、存在的几种解决方案
       在解决这个问题的过程中,主要考虑了以下几种形式:
方案1:在客户端安装ActiveX插件,实现打印的功能。这是更换了问题的概念,并没有解决问题,我们的问题是如何在Webgis上实现打印?所以这种方案不可行。
方案2:服务端地图引擎生成某种格式的可打印的地图文件,此文件下载到客户端。当然最好是PDF格式。客户端必须安装PDF Reader,目前这个不是问题。
 
三、失败是成功之母
       考虑 方案2是最可行的。所以我采用了地图引擎打印到虚拟打印机的方法。我在服务端(当然,就是我自己的计算机)安装了Adobe Pdf WriterOffice2003 Document Imaging两个虚拟打印机,分别生成了.pdf文件和.mdi文件。但是,一旦程序做为Web服务运行,必须模拟本机用户登录,否则无法打印。我在程序中编码模拟了我自己机器的管理员(Administrator/密码)登录(使用APILogonUserImpersonateLoggedOnUser),结果很激动,打印的文件正确生成了。但是服务端不断生成错误事件,报告我一堆错误。很快事件日志就满了。
       静静地想一想,即使没有那些错误发生,上面谈到的技术也不是一种好的解决办法,原因有:服务端必须安装 Adobe Pdf Writer Office2003 Document Imaging 之一。这 2 个软件可都是要美圆的。另外 Office2003 Document Imaging 最大分辨率只为 300dpi ,而 Adobe pdf 4000dpi 。我不禁佩服专业就是专业。
 
四、胜利在向我招手
       我把目光转向开源领域的实现。那是 GnuWin32 的项目。很早我下了它的源代码,今天终于要派上用处了。我的原则是:必须最终能生成 PDF 文件,必须支持多页。我发现, CxImage 就是这样一个能生成多页 TIFF 的免费开源实现。 LIBTIFF 里面有工具能支持 TIFF PDF 的转换,虽然是以 tiff2pdf.exe 提供的,但是有源代码 .c 文件。我用 VS7 很容易就可以重新编译成功。这样,我写了测试小程序,测试结果完全满意。一幅 A0 的地图,最终生成的 PDF 不大于 1M 。多页当然也没问题。
       接下来就是集成到我的代码里来。我使用 CxImage599c LIBTIFF3.8.2-1
 
五、小贴示
       VC7 里面有个 CImage 类,其功能当然无法与 CxImage 相比。而且我用 CxImage 生成的单页或多页 TIFF 都无法被 Windows 下的看图程序所读取。难道是 CxImage 生成了错误的 tiff 了么?而 Adobe Pdf Writer 可以成功打开这个 TIFF ,说明没错。是 Windows 做的不够好。
       在很多方面,Windows做的都没有开源做的好。可惜我的代码里使用CImage的地方太多了,不然一定换成CxImage。下面的开源网址是我代码的源泉:
       http://www.zlib.net
 
       不知道我说明白没有?
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值