如何用java在WEB中java 打印 pdf表格表格

Java报表打印之Flash打印
FineReport支持APPLET打印,PDF打印,FLASH打印三种报表打印方式,适应多种不同的打印需求。其中,FineReport独创的FLASH报表打印技术,第一次完美解决了困扰java报表行业十几年的基于浏览器的打印问题。
现在的基本上都是基于,报表的展现和编辑基于浏览器,自然需要基于浏览器的打印方式。但是由于浏览器的直接打印不能够精确分页,不支持连打,因此目前的Java报表工具多采用式的打印方式,如APPLET,PDF等,但这两种方式均需安装较大的插件,实用性差。
基于以下几个原因,浏览器的直接打印并不能作为的解决方案:
(1)不能精确分页
浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。但是报表的展现和打印往往是按照规则的大小进行分页的。所以不能精确分页的打印控制难度较大。
(2)会有页脚页眉干扰
(3)不能准确对齐边边距及打印文字
(4)不能支持连续打印
在报表的打印中,特别是票据的套打中,连打是非常普通的一个需求,即每次不是仅打印一张票据,而是连续一次打印若干个票据。
由于以上的问题,不能够利用浏览器的直接打印功能。目前一般的采用的打印方式多为PDF打印,APPLET打印或者ActiveX打印,但是三者有一个共同的问题就是:都需要下载安装较大的插件,并且ActiveX的方式仅支持IE浏览器,而IE在越来越重视安全性的前提下,在较新的版本中都禁止了ActiveX,就给使用这种打印方式的报表造成很大困扰。
针对上述的问题和困难,Java报表工具FineReport独创了Flash打印技术,第一次完美解决了困扰报表行业十几年的基于浏览器的打印问题。Flash的分页或精确打印,都可以做到完美,并且几乎95%的浏览器都预装了Flash Player,打印之前不再需要安装Flash Player,即使需要安装也只有几百K的大小,非常的方便。
FineReport报表打印方式
由于市场的需要,其它也相应出现了Flash打印的功能,但由于技术的问题,只有一两家最后成功了,具体如下表所示:
FineReport独创
2009年—2010年
FineReport继续深化并将其应用面扩大
FineReport Flash打印完全成熟,国内另有一两家初步实现
FineReport报表工具首创的Flash打印在多年的经验积累下已经日趋完善,Flash打印更是可以做到打印报表无限制,不管什么报表,只要设计出来后,都可以使用FineReport的Flash打印实现精确打印。
FineReport帆软报表
版权所有(C)2016 南京帆软软件有限公司 | 苏ICP备号-3&&&&&&&&&&&&&&&&&&
posts - 50,comments - 144,trackbacks - 0
阅读排行榜
评论排行榜
做管理系统的时候,打印一直是个棘手的问题,做B/S的系统这个问题就更加突出了!下面举出三种常用的web打印处理方式
1、利用word或者excel来实现web打印(如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印)
&& 实现过程:先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功能来实现web打印。
&& 下面以excel为例实现如何打印的过程
&& 将网页中数据导入excel中的方法有很多,这里先介绍一种,利用ActiveX控件的方式,即 Excel.Application, 这个控件是MS为excel提供的编程接口,在很多种编程语言种都可以通过该接口来操纵excel表格。
&& 下面用javascript脚本来实现一个简单的例子。
& script language="javascript"&
function ExcelPrint(){
var excelA//存放Excel对象
var excelB//存放Excel工件簿文件
var excelS//存放Excel活动工作表
excelApp = new ActiveXObject("Excel. Application");//创建Excel对象}
alert("请启用ActiveX控件设置!");
excelBook = excelApp.Workbooks.Add();//创建Excel工作簿文件
excelSheet = excelBook.ActiveS//激活Excel工作表
var rowLen = printTable.rows.//table对象的行数
for (var i=0;i& rowLi++){
var colLen = printTable.rows(i).cells.//table对象的列数
for (var j=0;j& colLj++)//为Excel表的单元格赋值
excelSheet.Cells(i+1,j+1).value = printTable.rows(i).cells(j).innerT} //将表格中的每个单元格的innerText导入到excel的单元格中
excelApp.Visible =//设置Excel对象可见}
excelSheet.PrintOut(); //打印工作表
excelBook.Close(true); //关闭文档
excelApp.Quit(); //结束excel对象
excelApp=& //释放excel对象
& /script&
&& 运行该程序的前提是 IE要允许对没有标记为安全的Activex控件进行初始化和脚本运行。设置方法如下:
&& 打开控制面板→Internet选项→安全性→自定义级别→对没有标记为安全的ActiveX控件进行初始化和脚本运行→选中启用,这样我们的程序就可以运行了。如果没有启用该ActiveX控件设置,那么程序在执行创建Excel对象时会抛出一个异常,这时可以通过catch()语句来捕获这个异常,并且做出相应的处理。
&& 运行该程序必须客户端安装了MS EXCEL,否则Activex驱动不了。
2、利用浏览器自带的打印控件来实现web打印
&& 实现过程:直接调用IE的打印功能或者在程序中调用window.print()来实现web打印,页眉和页脚会有网页标题、页码、网址,日期等信息,这些打印时如果不需要,怎样能去掉呢。做法其实很简单,只有在IE的文件菜单中打开页码设置对话框,去掉页眉页脚中设置的哪些信息,就可以了。但是这需要每个客户端都去手动设置一次。如果不想让每个客户端都手动去设置一次,也可以用代码通过修改注册表的键值来实现。
&& 下面是用VBScript来实现的修改注册表的过程:
&& & script language="VBScript"&
dim path, reg
'path存放IE打印设置的注册表地址, reg存放WScript.Shell组件的对象
path = "HKEY_CURRENT_USER\Software\Micro-soft\Internet Explorer\PageSetup"
'通过注册表修改打印设置,只修改页眉、页脚和各边界的值
'参数说明:header--页眉,footer--页脚,margin_left--左边界
'margin_top--上边界,margin_right--右边界,margin_bottom--下边界
'页边距的设置中 1对应25.4mm,即margin_left=1表示实际值的25.4mm
function pagesetup(header, footer, margin_left, margin_top, margin_right, margin_bottom)
On Error Resume Next
Set reg = CreateObject("WScript.Shell")
if err.Number&0 then
MsgBox "不能创建WScript.Shell对象!"
exit function
reg.RegWrite path+"\header", header'设置页眉
reg.RegWrite path+"\footer", footer '设置页脚
reg.RegWrite path+"\margin_left", margin_left'设置左边界
reg.RegWrite path+"\margin_top", margin_top'设置上边界
reg.RegWrite path+"\margin_right", margin_right'设置右边界
reg.RegWrite path+"\margin_bottom", margin_bottom'设置下边界
end function
& /script&
还有一点需要注意的是,利用window.print()这样的方法来打印,是直接弹出打印对话框,而不是打印预览的窗口。一般来说用户希望先打印预览一下,然后再打印。或者有的格式固定的,每次都是一样的格式,就希望不弹出打印对话框,直接就打印出来。
还有的用户希望每个打印都是直接和一种纸张绑定好,打印时候直接就调用那种类型的纸张来打印,这样window.print()显然远远不够。
3、利用第三方的控件或者报表软件来实现web打印
&& 实现过程:第三方控件将打印的参数和方法封装成对象,在页面中可以方便的直接调用,例如ScriptX.cab,eprint.cab 都是这种类型的控件。可以直接用代码实现web打印页眉页脚的设置,web打印纸张的绑定,web打印边距的设置,web打印预览,直接web打印。
&& web打印格式设置,web打印分页,web打印换页重新打印某些信息,某些信息只能第一页打印,某些信息只能最后一页打印等等这些,也都解决方案。Scriptx没有处理这些的方案,webprint有webgrid和eprint两种解决方案,行列规则的表格式的可以简单webgrid来处理,复杂格式的可以用eprint来设计格式。
&& 一般这种类型的打印控件都是需要收费的,用户可以从经济的角度来考虑。
==========================================================================================================
一、 浏览器的打印功能菜单
这种方案的优势是不需要对浏览器作任何扩充,是最简单的办法,但问题也最多,如:
不能精确分页。
浏览器一般是根据用户设置的页面大小,web页面的内容多少,来自行决定分页位置,程序员很难控制。会有页脚页眉干扰。
不能准确对齐边边距及打印文字。
不能解决连续打印。
比如,不是仅打印一张票据,而是连续一次打印若干个票据。
二、 使用webbrowser控件+ javascript
这实际上,是浏览器打印功能菜单的一种程序调用,与打印功能菜单没什么两样。分页的问题仍然存在,只不过,可以让用户不用去点菜单,直接在网页中的一个按钮,或一个链接里面调用罢了。
三、 使用print css
这是一种最理想的实现web套打的方法。这种方法通过在html文档中,嵌入打印相关的css样式,来实现对html文档输出打印的控制,比如设置纸张大小,纸张纵横方向,打印边距,分页等。显而易见,这种方式成本小,不需要下载任何插件,而且跨平台性非常好。print css推出已经有些时日,但遗憾的是,至今没有一个厂商的浏览器很好地实现了这些标准,这使得程序员目前还不能利用print css进行实际的开发。关于打印css,参见:
四、 使用pdf文件
用这种方式,就是从服务器端下载一个pdf文件流,在IE中用adobe插件打开,然后用adobe的打印菜单进行打印,虽然这种方案,也能实现精确套打,但需要下载adobe插件。这是国外报表工具经常推荐的一种打印方法,但在pdf不那么普及的中国,这种方案不是最好选择。
五、 采用纯ActiveX
这种方案就是下载一个控件,票据的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,但缺点也是很明显的,嵌入ActiveX控件破坏了web应用的整体html风格,且这样的控件比较大(一般超过1M,下载颇费时间)。市场上的非java类报表产品,一般都采用这种方案。
六、 采用Applet方式
采用Applet方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在:
安装Applet成本巨大。需要下载十几M的文件。
Applet本身可能并不大,但运行Applet所需的jre一般至少10几M(jre1.4.2 , 15.45M)。用户需要极大的耐心,来进行打印。
打印报表时,需要重新向服务器检索数据,效率低。
因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前html页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html呈现,一次用来打印。
市场上java类的报表工具,一般推荐Applet方式来实现打印。
七、 轻量级的ActiveX打印方式
这是本公司应客户要求,最新推出的一种最具创意的web套打解决方案。
杰表作为一款纯java的报表工具,以前提供的web套打方案也是基于Applet的,Applet也做到了尽可能的小(只有24kb),但用户还是抱怨,因为jre太大,安装需要耐心。另外,用Applet方式,很难实现客户端的批量打印功能。
我们采用轻量级的ActiveX打印方案,很好地解决了客户的问题。以下是一个典型的该种方案的示例
阅读(57822)
&re: web打印,web打印控件的三种实现方法
zz[未登录]
不错,长见识了。&&&&&&
&re: web打印,web打印控件的三种实现方法
国内的 jatoolsPrinter 做得挺不错。我们项目中在用。
&re: web打印,web打印控件的三种实现方法
ReYoPrint (锐洋.打印控件)是一款实现网页套打的专用工具。作为web应用开发者,我们经常会遇到在浏览器中打印报表、票据的需求,这些需求浏览器本身的打印功能一般不能满足, 如精确打印,分页,套打等。这就需要有一种能解决常见的浏览器端打印问题的软件工具,这也是 ReYoPrint 的研发背景。ReYoPrint内含一个在vc7.0上开发的ActiveX控件(73k), 这个控件主要实现对打印参数的控制,ReYoPrint使用户通过JavaScript脚本可以控制分页,页眉页脚,页边距,打印方向,自定义纸张,直接打印,弹出打印对话框再打印,预览,放缩打印,成批打印,套打等功能
ReYoPrint 的主要功能有:
支持设置打印参数,纸张类型,打印方向(横、竖)等 。
支持自定义的页脚、页眉设置。
支持打印区域拖拽及鼠标滚轮放大缩小功能。
支持程序分页与自动分页(支持ESC关闭预览窗口)。
支持打印预览,支持预览时指定页、指定份数打印。
支持直接打印指定票据的URL。
支持票据套打时,底图仅在打印预览时显示,不输出到打印机。
小巧,整个控件只有73K,不需要额外的软件包支持。
与您项目采用的技术标准无关,J2EE、.NET 项目均可。
IE 5.5+ 中适用。
ReYoPrint 的缺点有:
由于控件是基于WebBroser的所以,目前只支持基于IE的WEB打印。
不支持直接打印时选择打印机进行打印。&&&&&&
&re: web打印,web打印控件的三种实现方法
web打印的需求总在变,远不止这些:
一开始人们只希望把网页内容完整打出来;之后希望打印的内容不要包含页眉页脚;再之后希望不要总是弹出打印对话框,能打印多页,能分页;后来希望打印的位置准确点;再后来希望位置能操作调整,调整后的内容能保存,此后有的希望能打印不显示的内容;再此后就是显示是显示,打印是打印;能打印多个页面的内容,能只按地址打印,能适应各类浏览器...,实际上,这个需求变化的过程就有“网页浏览查看”向“管理系统界面”发展的过程。为什么打印控件lodop一问世就如此流行?方向很重要!控件要能满足未知的需求,开发者才不至于走冤枉路。&&&&&&
&re: web打印,web打印控件的三种实现方法
好文章,收藏了 Java乐园技术交流, 2群群号:&&&&&&
&re: web打印,web打印控件的三种实现方法
北京方成公司的打印插件,很不错!
使用特别方便,就是一个很小的activex控件,页面后,就能使用了
设置页边距,页眉页脚,横向,纵向
设置自定义纸张,特定报表绑定特别纸张,指定打印机打印报表
打印url,一次打印多份文档,打印完成后回调事件等等。
有兴趣可以看看 .cn&&&&&&
&re: web打印,web打印控件的三种实现方法
如果能自己写一个打印控件就好了&&&&&&
&re: web打印,web打印控件的三种实现方法
PAZU -- 4Fang WEB 打印控件 很不错!&&&&&&
sdreee&&&&&&
&re: web打印,web打印控件的三种实现方法
Eloon WebPrint是为满足不同用户对WEB单据有不同的打印需求而产生,充分考虑到了用户的使用习惯,简单的操作就能定制出理想的打印格式,并且可以把打印格式保存为XML格式描述文档,在下次再进入该页面时,自动加载此格式描述文档进行打印做业。 Eloon WebPrint把打印格式的控制权交给了用户,完全解脱软件开发人员对WEB打印的开发与维护的工作,因此大大加快项目开发进度,为公司节省开发及维护成本。可以自定义的内容如下:1. 自定义默认打印机,打印纸型,打印方向,边距。2. 自定义打印页眉信息。3. 自定义打印标题。4. 自定义打印表首信息。5. 自定义打印表格输出的列及列宽、数据对齐、格式化数据、合计项目控制等。6. 自定义打印表尾信息。7. 自定义打印页脚信息。有中文版.有兴趣可以看看 &&&&&&
&re: web打印,web打印控件的三种实现方法
@interdrp
reyo 双打的SCRIPT 在哪呢&&&&&&
&re: web打印,web打印控件的三种实现方法
试试看.&&&&&&
&re: web打印,web打印控件的三种实现方法
不错&&&&&&
&re: web打印,web打印控件的三种实现方法
谢谢,收藏了
&&&&&&
&re: web打印,web打印控件的三种实现方法
打印报表时,需要重新向服务器检索数据,效率低。
因为Applet方案,一般采用html方式呈现数据,打印时Applet必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,Applet根本不会用当前html页的数据来打印,而是向服务器下载数据到Applet中来打印。也就是说,打印的话,必须两次请求,一次html呈现,一次用来打印。
可以通过调用applet的方法将打印内容传进去啊
唯一的遗憾是要弹个是否允许使用打印机的提示,&&&&&&
&re: web打印,web打印控件的三种实现方法
zz[未登录]
国内最专业的打印控件:jatoolsPrinter且支持chrome,opera,firefox 等非IE浏览器。&&&&&&
&re: web打印,web打印控件的三种实现方法
好像lodop快一统江湖了。&&&&&&
&re: web打印,web打印控件的三种实现方法
zz[未登录]
jatoolsPrinter (杰表打印控件) 是国内最专业的网页打印的工具。解决了web客户端精确打印,批量打印,打印配置自动保留等问题。 1、小巧,整个控件只有200k。 2、可以打印预览。 3、支持一维码,二维码显示、打印功能。4、有可视化设计套打功能,可轻松地拖拽位置、调整样式,保存调整结果;5、支持票据上万份的连续批量打印,不走样、不偏移。6、完美支持复杂表格分页。7、支持excel导出功能。8、支持浏览器有IE、Firefox、Chrome、Opera、Safari,带微软数字签名。9、大型电子政务项目、各大软件开发商指定打印控件。 &&&&&&
&re: web打印,web打印控件的三种实现方法
jatoolsPrinter有基于web的设计器,允许用户在打印时,拖放打印位置:&&&&&&
&re: web打印,web打印控件的三种实现方法
不错的文档,感谢分享,我们公司之前做了一个japerreport报表项目就需要打印功能。找来市面上几乎所有的web打印控件,发现在几百台机子的情况下,稳定性最好的还是jatoolsPrinter.&&&&&&
&re: web打印,web打印控件的三种实现方法
貌似不错的样子!&&&&&&
&re: web打印,web打印控件的三种实现方法
zz[未登录]
好厉害,学习了&&&&&&java 中的打印信息怎么打印到JSP页面上?
java中的System.out.println(&...&);在用jsp直接调用的时候,是否可以把这些打印内容直接打印到页面上显示呢?
09-07-11 &匿名提问
jsp中是out.println();
请登录后再发表评论!
不错的答案!
请登录后再发表评论!

我要回帖

更多关于 java 打印 pdf表格 的文章

 

随机推荐