一个打印问题,请大家提个思路

03-01-07 Jevang
JevangL74Ro01063.bmp

这里是样板,动态数句 COME FROM DB.

多谢!

-Wanchun

sam_java
2003-01-11 13:48
我有个建议,不知可否供参考。把打印数据的物理参数信息(位置,字体,格式等)也存到数据库,这样可以根据不同的票据,调整打印位置,字体大小什么的。我们有个项目就这么做的,效果还不错。

xjg95
2003-01-11 19:42
建议作一个通用接口,数据传送采用Xml,Xml中定义总页数、每页需要打印的字的位置、字体、内容等

iceant
2003-01-12 02:53
如果是WEB 应用,我原来为某市电信局开发过一个简单的控件,
他们的应用是套打。
我做的是一个 ActiveX, 用 JavaScript 控制ActiveX直接向打印机送数据。
如:printer.Print(x,y,content,font-face,font-size,align)
这种方式就需要将数据全部以 JavaScript 模板的方式送出来打印

另外还支持一种,就是由控件自己通过网络,从Server端读取数据文件打印,数据格式很简单:
x,y,content,font-face,font-size,align
一行就是一个命令.
比如
10,20,这是标题,黑体,12,left
控件就会在纸的 (10mm,20mm) 处以12号黑体开始往前打印“这是标题”几个字。也就是说,"题" 字是在 (10mm,20mm)处. 如果将 left 换成 right,"这"字就在 (10mm,20mm)处打印.

因为我是直接操纵打印机,可以很精确打印,遇到打印错位的时候,在客户端的ie目录下有个 XXX-config.cfg 文件,里面有 x,y 值偏移量,可以通过调节这两个值来让客户端做到精确打印

Jevang
2003-01-13 01:29
非常感激各位,very constructive ideas.
Especially Iceant, you had told me exactly what I am looking for, "套打" thru both Browser and server.
If I have chance to be in Shenzhen, I will buy you a lunch.( Who care about a meal, but it would be my pleasure to meet you in person).

-Wanchun

iceant
2003-01-13 01:45
TO:Jevang

It should be my pleasure!

banq
2003-01-13 14:07
不要忘记我,我也会赶过去。呵呵

大雨不停
2003-01-14 18:29
看不清楚

打印?用js调用打印预览可实现较简单的打印。
做web报表?

Jacky Shao
2003-01-15 16:27
<blockquote>
<p align="center"><span class="aaa"><font color="#800040"><b>企业制表系统的设计与实现</b></font></span></p>
<p align="center"><span class="aaa">颜雄雄
中国科学技术大学研究生院计算机系 北京(100039)</span></p>
<p align="center"><a name><font color="#000000" face="Times New Roman" size="2"><strong>THE
DESIGN AND IMPLEMENTATION OF ENTERPRISE REPORTING SYSTEM</strong></font><br>
<font color="#000000"><strong><font face="Times New Roman" size="1">Yan Xiongxiong</font><font
size="1"> </font></strong></font></a></p>
<p align="left"><a name><font face="Times New Roman" size="2"><font color="#000000">Graduate
School, University of Science and Technology of China, Beijing(100039)</font><br>
</font><b><font color="#044368" face="Times New Roman" size="2">Abstract</font><font
face="Times New Roman" size="2"> </font></b><font face="Times New Roman" size="2"
color="#000000">The topic on the technology requirements of Enterprise Reporting in the
environment of Client/Server and Internet is discussed in the thesis, by presenting the
design and implementation of JReport Enterprise Reporting Tool System. </font><font
face="Times New Roman" size="2"><br>
</font><font color="#044368" face="Times New Roman" size="2"><b>Keywords</b></font><font
face="Times New Roman" size="2"> </font><font face="Times New Roman" size="2"
color="#000000">Reporting, Information, Internet, Server, Portability</font></a><font
color="#000000" face="Times New Roman" size="1"> </font></p>
</blockquote>
<ol>
<li><span class="aaa"><strong>前  言  </strong><b><br>
</b><br>
及时存取信息是在当今快速发展的异类、分布的商业环境中取得成功的关键,而报表是人们归纳性地处理信息的一种最常用的手段。虽然制表是最先开发的计算机应用之一,但是随着计算环境的快速发展,象客户/服务器和Internet这样的新体系结构正更快速地发展,同时公司的企业也已扩展到包括雇员、客户、供应商和其他合作伙伴的范围,在充分利用这些新环境方面以及满足扩展企业的商业制表需求方面传统制表技术已显得落后,其结果是导致最近新产品种类的出现:企业制表(Enterprise
Reproting)。<br>
<br>
</span></li>
<li><span class="aaa"><b>制表的现状及未来  <br>
<br>
</b><font color="#000000">传统制表提供给用户的是由单个应用程序或桌面制表软件包生成的硬拷贝。传统的报表是静态的和非交互性的,往往只有有限的图形。<br>
<br>
传统的制表工具主要有两种:生产制表(Production Reporting)和桌面制表(Desktop
Reporting)。生产制表用于大量书面报表或商业文件的生产。生产制表需要一个复杂的编程工具,通常有非常复杂的格式、多个数据源和复杂的数据流。其结果是生产制表一般由IS组织机构管理,最终用户少量地或根本没有参与。<br>
<br>
桌面报表非常简单自然,通常在小同类数据集上执行简单的查询,并按制表模板所提供的预定义式样格式化这些数据。桌面制表系统,比如Crystal
Reports,不需要编程,并设计得非常容易使用。其结果是输出受到限制,并且复杂的报表或大规模制表显然是不可能。桌面制表系统不能扩展到企业水平,而且大多数局限于单个平台,也没有灵活的运行时参数(Runtime
Parameter)。<br>
<br>
许多基于数据仓库(data warehouses)和数据集市(data mart)的管理查询(managed
query)和OLAP工具拥有一定的制表能力。然而,有效的数据仓库制表不能用管理查询和OLAP工具来完成,因为它们是专门为数据分析设计的,而不是为数据的分发(distribution)设计的。<br>
<br>
而企业制表系统(ERP - Enterprise Reproting System)则使得公司能够与全企业的雇员,以及合作伙伴、供应商和用户共享重要的信息。ERP应是生产制表和桌面制表工具的合并和发展,既具有生产制表工具的能力又有桌面制表工具的灵活性。ERP解决方案必须能够制作任何报表,不管逻辑的复杂性、数据源的数量或类型、或格式编排需求。此外,ERP解决方案必须是高度可伸缩的,能有效地产生和分发报表。<br>
<br>
企业制表带来的最大变化将是通过Internet以及传统的客户/服务器的报表分发。用企业制表系统创建的报表存储在服务器上,用户通过LAN
、Internet可访问服务器,可根据需要下载报表,获取他们想要的信息。<br>
</font></span><font size="2" color="#000000"><br>
</font></li>
<li><span class="aaa"><b>JReport制表系统的设计与实现</b></span><p><span
class="aaa"><b>3.1 技术要求<br>
<br>
</b>企业制表着眼于解决最终用户的商业制表需求。简单地说,一个ERP应该能够做到:<br>
<b><em><br>
</em>可生产操作报表 </b>能够生产复杂的管理商业的操作报表(operational
report)。<br>
<b><br>
最终用户可裁剪和定制 </b>最终用户能够重用、裁减和定制标准操作报表的构件,能容易地创建新的报表并保证一致的格式化和可读性。<br>
<b><em><br>
</em>从小到大可伸缩展开 </b>能够支持从少于十个用户到地理上分布的上千用户的工作组。用户能够下载一个报表并离线(off-line)细读。在线报表(on-line
reports)必须是数据的有用的、有效的汇总,能够访问细节,不仅仅是书面报表的在线表示。<br>
<b><br>
可通过Internet访问 </b>公司的企业已从公司的边界延伸到客户、供应商和合作伙伴。因此,企业制表系统必须是Internet可访问,且整个制表环境应该也是可通过Internet访问的。<br>
<b><br>
灵活的数据存取 </b>企业数据(enterprise data)应能取自各种数据源,而且在被显示之前能够作进一步的处理,包括过滤、汇总、分类、规格化等。<br>
<b><br>
先进的数据表达 </b>用户可能会被大量的数据所淹没。为了更容易地消化数据,需要先进的数据表达技术,把相关的数据按有意义的方法进行分类和汇总。<br>
<b><br>
强大而简单的用户环境 </b>企业制表必须足够强大创建最复杂的企业报表,但又足够简单让最终用户在没有开发经验或培训的情况下能够使用它。
</span></p>
<p><span class="aaa">一个ERP还应该考虑以下几个问题</span></p>
<p><span class="aaa"><strong>多层体系结构</strong>
为了处理企业制表的复杂性,在客户与服务器之间需要一个功能分布的多层体系结构(multi-tier
architecture)。服务器扮演数据访问(access)、报表生成(generation)和分发的关键角色,而且将把对网络和操作数据库的性能影响减到最小。多层体结构还提供适合任何环境的灵活性,能适应环境的变化。</span></p>
<p><span class="aaa"><strong>多平台</strong>
企业是由一些兼容性相对较低的硬件平台和操作系统组成的。为了有效地横跨一个企业进行操作,一个ERP必须能在异类的环境中运行。</span></p>
<p><span class="aaa"><strong>按需分页</strong>(Demand paging)
向大量的用户频繁传送数据可能对网络、数据库和客户环境产生不良影响。把报表页存储在一个集中的服务器中,然后一次一页根据需要把它们发送给用户。</span></p>
<p><span class="aaa"><strong>Internet访问的安全</strong> 虽然Internet是数据访问和分发的绝好工具,但当考虑通过Internet分发公司数据时有许多问题必需解决。例如,哪些数据集是可以访问的?哪些用户应该被授予特权阅读这些数据集?敏感的公司数据的安全如何管理?Internet的访问将会怎样影响操作数据库的性能?</span></p>
<p><span class="aaa"><strong>3.2 开发工具与JAVA系列技术</strong></span></p>
<p><span class="aaa">一个真正有发展前途的制表系统应是高度可移植的,或可跨平台使用的。支持多平台意味着不需要不同版本的制表系统。对于用户,采用这样一个制表系统即可满足全企业的制表需求,也便于维护和培训。对于开发商来说,这在开发、维护和版本升级阶段都可节省大量的人力、物力和时间。所以JReport制表系统采用100%纯Java标准来开发。</span></p>
<p><span class="aaa">设计一个ERP的主要原因是Internet应用的需求,而我们知道Internet能有如此迅速发展很大程度上归功于Java的应用,所以我们用Java语言来开发一个ERP肯定会更适合于Internet环境。</span></p>
<p><span class="aaa">用100%纯JAVA语言开发的软件本身具有高度的可移植性,即软件系统可具有高度的平台无关性;利用JAVA语言的动态特性,可以容易地实现软件系统的功能可扩充性,使产品升级变得非常容易;同时,利用JAVA语言的安全措施可以增加软件系统的抗病毒和抗恶意攻击的能力。</span></p>
<p><span class="aaa">Java Bean构件技术可以解决软件复用、提高软件生产效率和产品质量、缩短产品交付时间。</span></p>
<p><span class="aaa">Java Applet技术可以把客户端的Java程序方便地嵌入到Web网页中提供强大的和一致的报表阅读界面。</span></p>
<p><span class="aaa">JDBC(Java Database Connectivity,Java数据库互连)
标准可以解决绝大多数的数据库连接。</span></p>
<p><span class="aaa"><strong>3.3 JReport系统的体系结构</strong></span></p>
<p><span class="aaa">JReport制表系统作为一个面向企业的制表系统,它支持一个基于服务器的三层结构:一个数据源层,一个服务器层和一个客户层(图1)。在第一层或客户层,用户可以在Internet或在局域网(LAN)上用Web浏览器或用JReport
Client Viewer访问JReport服务器请求、产生、阅读和打印报表。JReport
Designer是一个可视的、面向对象的开发工具,它为开发人员提供一个设计、编译、调试和阅读报表的环境。</span></p>
<p align="center"><span class="aaa">图1 JReport系统的体系结构<img align="right"src="http://www.jtotal.com/images/mutual.GIF" WIDTH="337" HEIGHT="231"></span></p>
<p><span class="aaa">服务器是多层结构中的中心,它负责所有数据的提取、报表的生成、存储、安全、管理和报表的分发,能够按进度表(Schedule)的时间模式运行报表。在服务器层,JReport服务器利用JReport
Engine产生报表,而JReport Engine作为一个操作系统进程由服务器控制它的运行。JReport
Repository是一个储存和管理所有组成JReport制表系统组件的中心存储池,这些组件包括报表设计(report
designs)、进度表和所产生的报表结果。</span></p>
<p><span class="aaa">在数据库层,支持标准数据库访问,包括JDBC和ODBC(JDBC-
ODBC桥),还可以访问用户数据源。与Microsoft的ODBC类似,JDBC提供了访问绝大多数关系数据库的通用的API,这包括重要的企业级客户/服务器数据库(如Oracle、Sybase、Informix和DB2),以及传统数据库如IMS。</span></p>
<p><span class="aaa"><strong>3.4 JReport Designer的设计</strong></span></p>
<p><span class="aaa">JReport Designer是JReport制表系统的第一个用户窗口,它本身也可以作为一个桌面制表系统。它支持点-击和拖-放的所见即所得报表设计,允许用户创建从简单到复杂的报表。它提供丰富的预定义报表模板(report
templates),包括Form Letter、Mail Label、Cross Table、Subreport、Drill-down、Columnar以及标准报表模板,以及全方位的向导(wizards)方便用户快速地创建报表的基本框架。</span></p>
<p><span class="aaa">在基本的报表模板基础上,用户可以创建多级分隔的报表。允许开发人员创建可从用户接受运行时参数的报表,比如日期范围、产品编号或销售区域。可以在报表中加入交互式的2D和3D图表,对图表可以调整大小、旋转、选择数据子集、排序以及drill-down到具体数据。</span></p>
<p><span class="aaa">为了让用户能够对取自数据源的数据做进一步的加工处理,以及灵活地控制报表和报表对象的行为,允许用户定义自己的函数对象资源(object
resource)。</span></p>
<p><span class="aaa">在面向对象支持方面,允许用户直接用JReport的基本对象资源建立自己的对象模板,或继承JReport提供的基本对象类用Java扩展对象资源,或完全用Java写自己的用户定义(UDO)对象嵌入到JReport中。</span></p>
<p><span class="aaa">JReport Designer把设计报表的多级对话框的使用减到最少,使报表的设计过程尽可能直觉。</span></p>
<p><span class="aaa">为了让用户能够方便地创建复杂、功能齐全的报表,JReport
Designer提供两个设计工具:配置报表对象的Catalog Browser和配置对象属性的Report
Inspector。</span></p>
<p><span class="aaa">JReport Designer由三部分组成:用来设计报表的报表编辑器(Report
Editor)、用来生成和预览设计的报表结果的报表引擎(Report Engine)和报表阅读器(Report
Viewer)。</span></p>
<p><span class="aaa"><strong>Catalog & Catalog Browser</strong></span></p>
<p><span class="aaa">Catalog集中管理JReport
系统中所有用来创建报表的对象资源,包括与数据库的连接、查询、函数和参数列表、几何图形和图表、交叉表、子报表等资源。所有的对象资源按其所属关系分门别类在Catalog
Browser中以层次结构组织。用户通过Catalog Browser可以一目了然地浏览所有的对象资源和对象模板及其属性。</span></p>
<p><span class="aaa"><strong>Report Inspector</strong></span></p>
<p><span class="aaa">在Report Inspector窗口中以树型结构列出包含在报表中的所有对象,允许用户查看每一个报表对象的属性。Report
Inspector还允许用户改变每一个对象的名字和直接从这一窗口编辑对象的属性。
对象属性从Report Inspector窗口改变后立即在设计窗口得到响应,达到所见即所得的效果。
</span></p>
<p><span class="aaa"><strong>Report Wizard</strong></span></p>
<p><span class="aaa">利用JReport Designer大量预先定义的报表模板可减少制作一些类似某个模板的报表的所需时间。根据选择的模板的不同,JReport
Designer将提供不同的向导指引用户一步一步地完成设计。</span></p>
<p><span class="aaa">JReport Designer支持最直觉的报表设计,所有的设计工具总是随手可得的,无论是创建新的对象资源或在设计窗口插入对象,都将弹出一个相应的对象资源创建向导或报表对象设计向导;任何时候在设计窗口点击任何对象都将弹出一个相应的对象编辑器或对象属性编辑器。</span></p>
<p><span class="aaa"><strong>3.5 JReport Server ( 服务器 ) 的设计</strong></span></p>
<p><span class="aaa">JReport服务器的设计目标是满足企业应用对安排任务、输出报表的灵活性和多样性、保持报表的历史纪录、向Intranet
和Internet投递报表的需求。JReport服务器向用户提供安全的报表,使用户能够控制对资源的访问。JReport服务器实现标准的HTTP网络协议以支持通过专用的JReport
Client Viewer和通用的Internet浏览器进行远程浏览和维护。实现强大的数据资源管理、网络支持和灵活的投递功能,使得JReport服务器成为三层应用框架的最好的中间件服务器之一。</span></p>
<p><span class="aaa">在时间控制模式的支持下,JReport服务器可实现无人照管的操作,可以把大量的报表生成安排在非高峰期进行。</span></p>
<p align="justify"><span class="aaa">JReport Server由几个主要模块组成(图2):<strong>  
</strong><img alt="picture.GIF (4786 bytes)" src="http://www.jtotal.com/images/picture.GIF" align="right"
WIDTH="361" HEIGHT="348"></span></p>
<p align="justify"><span class="aaa"><b>基础网络支撑 </b>支持通用Internet浏览器或专用JReport
Client Viewer的基础HTTP网络通讯。</span></p>
<p align="justify"><span class="aaa">图2 JReport Server结构</span></p>
<p align="justify"><span class="aaa"><b>JReport引擎 </b>负责生成各种报表结果。报表结果可以有多种存储格式,如JReport的内部格式RST、标准HTML、PDF和TEXT等。</span></p>
<p align="justify"><span class="aaa"><b>资源管理 </b>在JReport
服务器中提供一个树型构架维护所有的资源,包括目录、文件、JReport
Catalog和JReport报表/结果文件。在JReport中提供一种资源映射机制允许网络管理员来说明JReport服务器的资源节点对应于任意的目录或文件,而这些目录或文件可以是本地的或远地的,这样远地客户能够从远地客户终端通过JReport资源名访问这些被映射的本地或远地资源。</span></p>
<p align="justify"><span class="aaa"><b>版本控制 </b>记录JReport报表结果的历史。用户可以指定什么时候自动删除某个报表版本,可以保留多少个报表版本。</span></p>
<p align="justify"><span class="aaa"><b>任务进度表 </b>提供任务进度表(Schedule)能力满足企业应用对预定时间任务或重复任务的需求。用户可以用多种方式指定时间表(比如每日、每周、每月或在工作日或在指定的时间)运行任务。</span></p>
<p align="justify"><span class="aaa"><b>出版管理 </b>支持多种报表投递手段。用户可以把报表投递给JReport服务器的资源,投递给其他的Web服务器资源。JReport
Server还可以用邮件(mail)投递报表,或用邮件发送一个通知。</span></p>
<p align="justify"><span class="aaa"><b>安全管理 </b>采用Java的ACL(访问控制表)实现JReport服务器的安全机制。JReport服务器根据对ACL、资源和用户的某种算法确定同意或拒绝来自客户的请求。</span></p>
</li>
<li><p align="justify"><b><span class="aaa">结  论 </span></b></p>
<p align="justify"><span class="aaa">JReport通过开发一个以服务器为中心、可视和面向对象的开发环境的体系结构已基本解决企业制表的问题。同以往的制表系统相比,本系统具有以下明显的优点:</span></p>
<ol>
<li><span class="aaa">JReport系统是一个完全用JAVA写的报表生成工具,可以在任何平台上运行,只要该平台有Java
VM。 </span></li>
<li><span class="aaa">支持点-击、拖-放的所见即所得的用户接口,不需Java的知识通过一个向导就可创建复杂、功能齐全的报表。
</span></li>
<li><span class="aaa">支持交互式2D和3D图表:可调整大小、旋转、选择数据子集、排序、挖掘到具体数据。
</span></li>
<li><span class="aaa">提供大量的字符串、数学和统计函数,还有可创建用户定义的函数。
</span></li>
<li><span class="aaa">支持用户定义对象,可集成用户Bean构件。 </span></li>
<li><span class="aaa">所有的系统模块都可做成Java Bean构件被用户应用软件集成。
</span></li>
</ol>
<p align="justify"><span class="aaa"><b>摘 要 </b>本文通过一个面向企业的制表工具系统JReport的设计与实现,探讨企业制表系统在C/S和Internet环境下的技术要求和实现方法。</span></p>
<p align="justify"><span class="aaa"><b>关键词 </b>制表,信息,因特网,服务器,可移植性</span></p>
<font size="2"><b><p><span class="aaa">参考文献 </span></b></font><ol>
<li><font face="Times New Roman" size="2">LETA HERMAN. Reporting Tools: Fulfilling
Enterprise Needs. Application Data Trends, May 1996 </font></li>
<li><font face="Times New Roman" size="2">Eva Freeman. Eye on Desktop Reporting Tools.
Datamation, June 1997 </font></li>
<li><font face="Times New Roman" size="2">Sun Microsystems, Inc. THE 100% PURE JAVA tm
INITIATIVE WHITE PAPER. <a href="http://java.sun.com/100percent/wp.html" class="aaa">http://java.sun.com/100percent/wp.html</a>,
1997 </font></li>
<li><font face="Times New Roman" size="2">Jaworkski J. Java Developers Guide. Simon &
Schuster Publishing House , 1997</font></li>
</ol>
<blockquote>

猜你喜欢