一个电信系统模块分析

业务需求:
一个电信系统的业务需要将其他异构计费系统导出的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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值