我是靠谱客的博主 糟糕鞋子,最近开发中收集的这篇文章主要介绍一个电信系统模块分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

业务需求:
一个电信系统的业务需要将其他异构计费系统导出的pdf中数据导入到本java开发的计费统计系统,
pdf格式:
日期 2010-10-11 用户 王家辉

长途费 50 短信 50


1页
最后在本系统创建一张表,可以按时间查询,并要统计各种费用.

下面说一下自己的思路:

先解析pdf,根据x,y坐标解析
这个按时间统计,首先要在时间上分表分区
然后再时间这个字段做一个索引

按顺序读取,放入一个map中,最后放到一个容器中,传到后台,后台在将这个容器迭代,用key找value


关于PDF和JAVA的资料,国内实在是太少了;我想可能是由于国内的PDF开发人员不多的缘故吧。 所以,我想把自己研究出来的一点东西放到csdn上。 希望会对其他的开发者有所帮助。。。

先说说坐标系的概念 ,这个大家应该都不是很陌生了。也就是我们要做屏幕上或者其他的输出设备上做出图形,当然需要知道一系列点的坐标。 不过一切点的坐标都是通过坐标系来标识的, 如(100,100)


java的坐标(0,0)是从屏幕的左上角开始的,而PDF的(0,0)是从屏幕的左下角开始的。所以两个坐标系的Y坐标系正好是颠倒的。

所以这时假设我们有个坐标 (100,100) 那么在两个坐标系中的X坐标是相同的 不过Y坐标可能就会差的很远了。 下面看看怎么做能让java的坐标变成PDF的坐标?

Graphics2D g2 = (Graphics2D) g;
g2.translate(400, 400);//为了更方便 把0,0移到400,400
g2.drawLine(0, 0, 500, 0);
g2.drawLine(0, 0, 0, 300);

此时这条线的y方向是向下的(因为java的y轴正方向是向下为证的)

AffineTransform pdftransformation = new AffineTransform(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
AffineTransform pdftransformation = new AffineTransform(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
AffineTransform javatransformation = new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
pdftransformation.concatenate(javatransformation);
g2.transform(pdftransformation);

上面的几句话就很难解释了 。

用代数式写可以写成 x' =x ,y'=-y

g2.drawLine(100, 100, 500, 100);
g2.drawLine(100, 100, 100, 300);

在画线的时候 这次Y轴就向上了 因为此时每向draw方法里传值 其Y坐标都会变成-y 然后再以java坐标系绘出 。 也就是说所有的点Y坐标都需要变化一次(这里是成负数)再以java坐标系画出。

直接的理解就是 在这时 ,传正值给draw方法 y如果是正数 就向上了。

有关

AffineTransform pdftransformation = new AffineTransform(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
AffineTransform javatransformation = new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
pdftransformation.concatenate(javatransformation);

最后

以上就是糟糕鞋子为你收集整理的一个电信系统模块分析的全部内容,希望文章能够帮你解决一个电信系统模块分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部