“老地方”是本号的另设专栏,每期大约会讲述一个没头没尾、真实平坦的小片段,它们都和老地方有关,来自作者左右,一个脑洞很浅,但回路曲折、半毛钱都不舍得拔的金牛座拆二代 。
首先,这件事源于我现在的一份工作,接下来我将细致的讲述一下。
如下图,我的工作就是用java语言把快递单生成一个PDF文件。嗯,这看起来很简单,等等,公司现在的框架是来一个模板程序员手写一个模板,现在的任务是动态的生成模板。
What?简单点说,就是你来一个模板,用一个通用的方法给实现了。
还有点懵?解释一波,例如:达芬奇要画蒙娜丽莎,假如画板是100*100的,那么眼睛的位置只需要给一个方位,也就是一个二维的物理位置,那么这个眼睛就会跳到那个位置,而不需要人工手动的描绘。嗯,我想,现在你应该有点明白了。
讲真的,这对我来说,简直就是一个恐怖的任务,我们老大还略带调皮的说,这非常好玩的。的确好玩,以至于公司到现在都没有玩出来。
好,解释之后,言归正传了。如果进一步剖析这个问题,那么就势必要解决两个大方向的问题:
第一,动态数据的问题,这好解决,直接从数据库调就可以了;
第二:也是最棘手的问题,二维物理空间分配的问题。也正是在处理这个问题的时候,才有了这篇文章的诞生。
首先,上图白色部分的尺寸是283*283的,在处理文字的时候我总结遇到了以下的几个问题。如果是中文,且设置中文的尺寸为0.1F*getPage.size()大小,那么10个中文正好可以铺满整个屏幕 (如图)。
可同样是设置0.1F*width,对于英文和数字则截然不同。如果是大写的英文字母,那么是15个刚好可以铺满整个屏幕,其中大写字母I(此处读音为ayi),是占半个字符的空间。如果是小写字母,那么是18个字符可以占满整个空间。
而其中i,j,l,t四个字母相对于其他字母又只占了半个甚至更小的空间。对于阿拉伯数字,和小写字母占的空间是一样的,而其中的1并没有和我想象的一样会占更小的空间。
仅仅是文字,就已经需要做这么多的区分了。因为必须要考虑整个布局的美观问题,所以对于每种处理的方案必须要计算整个所需字段的长度,这才有了这种看似无聊,确又很有趣的事情。
当然,这只是分析阶段,还没有到布局阶段,再比如:图片问题,以前的处理方案都是慢慢的程序员慢慢的调试,直到满意为止,可现在是必须先取得图片的尺寸,然后给出一个好的解决方案。
简单的一句话就是将这些差别转化为无差别对待,这就是我现在要处理的问题。
赶着周五早上说这些,好了,我得写代码了,我们下期见。
领取专属 10元无门槛券
私享最新 技术干货