业务需求:
一个电信系统的业务需要将其他异构计费系统导出的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);
分享到:
相关推荐
Java Struts是Java Web开发中的一个经典框架,它结合了MVC(Model-View-Controller)设计模式,实现了业务逻辑与用户界面的解耦,提升了软件的可维护性和可扩展性。 在Java Struts框架中,Model代表业务逻辑,通常...
在电信行业中,计费系统是核心组成部分之一,它负责收集、处理和分析各种与通信服务相关的数据,确保准确地向客户收取费用。其中,数据采集模块是整个计费系统的基础,它负责从多个来源捕获原始数据。在这个项目中,...
在这个基于Hadoop的电信客服数据分析项目中,我们重点探讨如何利用Hadoop生态系统来解析和分析电信行业的客户通话记录,从而获取有价值的洞察。 首先,Hadoop是Apache基金会开发的一个分布式计算框架,其核心包括...
在系统架构部分,作者详细描绘了后台数据服务、前台营运管理和前台用户服务三个模块的相互关系。后台数据服务主要负责数据的收集、处理和存储,为前台的运营决策提供支持;前台营运管理则关注业务流程的控制和优化,...
在当前社会,电信诈骗已成为一个严重的社会问题,因此,设计这样一个系统具有重大的现实意义。 首先,我们需要了解课题的背景。随着信息技术的发展,电信诈骗手段不断升级,欺诈方式多样化,给公众的财产安全带来了...
文件组合中提及的“培训机构的一个实战项目”,意味着这些文档不仅仅是理论分析,还结合了实际操作的经验,这将为读者提供更贴近实际的参考,帮助解决实际问题。 通过上述内容,我们可以看出NETCTOSS系统需求分析...
本文将详述“电信设备-一种模块式控制器自动配置模块信息的系统”这一主题,这是针对这种趋势的一个创新解决方案。该系统的核心在于其模块化设计和自动配置能力,旨在提高网络管理效率,减少人为错误,并确保服务的...
本项目是一个模拟的电信计费系统,采用了Oracle数据库作为其核心数据存储解决方案。Oracle数据库是全球广泛使用的大型企业级数据库管理系统,以其高可用性、性能和安全性著称。下面我们将深入探讨电信计费系统的关键...
《电信增值服务计费管理系统》是一篇关于Java技术在电信服务计费管理领域的应用的毕业论文。...通过这样的系统,不仅可以提高电信服务提供商的运营效率,也能提升用户体验,是信息技术在电信领域的一个成功实践。
本文将详细解析一个基于JSP的电信业务计费系统,该系统专为电信行业的出租业务设计,是J2EE平台上的一个重要应用实例。 首先,JSP(JavaServer Pages)是一种动态网页技术,它允许开发人员在HTML代码中嵌入Java代码...
对于初学者,这是一个极好的学习实践平台,对于专业人士,则提供了优化和扩展系统的可能。 总结,C++电信计费系统结合了C++的强大功能和电信业务的复杂需求,通过精心设计和实现,确保了系统的高效稳定运行。深入...
"达内的电信系统"项目可能是一个教学或实践案例,旨在帮助学员理解并掌握如何构建和操作这样的系统。这个项目采用了Java作为主要编程语言,结合了三个关键的技术框架来实现其功能。下面我们将深入探讨这些知识点。 ...
"达内电信计费系统"是一个专为电信运营商设计的计费解决方案,旨在高效、准确地处理电信服务的收费和账单管理。该系统可能涵盖了从用户账户管理、套餐设置、流量计费、账单生成到支付处理等多个关键功能模块。在描述...
1. **系统架构**:一个完整的电信计费系统通常包含多个模块,如业务处理、数据采集、计费引擎、账单生成、客户服务和报表分析等。这些模块相互协作,确保系统能够高效稳定地运行。 2. **计费引擎**:计费引擎是系统...
【SSH框架】是Java开发中的一个经典组合,由Spring、Struts和Hibernate三个开源框架集成。这个名为"nectoss电信计费系统"的项目显然基于...对于学习Java Web开发或者电信行业计费系统的人员来说,这是一个宝贵的资源。
【大唐电信管理系统】是一个基于SSH2(Struts2、Spring、Hibernate)框架的综合性电信管理解决方案。SSH2是Java开发中的一个流行组合,用于构建高效、可维护的企业级应用程序。Struts2作为MVC(Model-View-...