仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2100|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网站制作之整合PDF和Java手艺

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:49:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
net程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net比。java程序员都是代码完成的,所以java程序员常戏称.net程序员是操作员,呵呵。择要  自从Adobe公司1993年第一次公布大众PDF参考以来,撑持各类言语战争台的PDF工具和类库就如雨后春笋般出现。但是,Java使用开辟中Adobe手艺的撑持绝对滞后了。  自从Adobe公司1993年第一次公布大众PDF参考以来,撑持各类言语战争台的PDF工具和类库就如雨后春笋般出现。但是,Java使用开辟中Adobe手艺的撑持绝对滞后了。这是个奇异的征象,由于PDF文档是企业信息体系存储和互换信息的局势所趋,而Java手艺出格合适这类使用。但是,Java开辟职员仿佛直到比来才取得成熟可用的PDF撑持。  PDFBox(一个BSD允许下的源码开放项目)是一个为开辟职员读取和创立PDF文档而筹办的纯Java类库。它供应以下特征:提取文本,包含Unicode字符。和JakartaLucene等文本搜刮引擎的整合历程非常复杂。加密/解密PDF文档。从PDF和XFDF格局中导进或导出表双数据。向已有PDF文档中追加内容。将一个PDF文档切分为多个文档。掩盖PDF文档。  PDFBoxAPI  PDFBox计划时接纳面向对象的体例来形貌PDF文档。PDF文档的数据是一系列基础对象的汇合:数组,布尔型,字典,数字,字符串和二进制流。PDFBox在org.pdfbox.cos包(COS模子)中界说这些基础对象范例。你可使用这些对象与PDF文档举行任何交互,但你应当先对PDF文档外部布局和高层观点作一些深切的懂得。比方,页面和字体都是带有特别属性的字典对象;PDF参考手册供应这些特别属性的寄义和范例的申明,但这是一个单调的文档查阅历程。  因而,org.pdfbox.pdfmodel包(PD模子)应运而生,它的基本是COS模子,但供应了以一种熟习的体例会见PDF文档对象的高层API。对底层COS模子举行了封装的PDPage和PDFont等类就在这个包中。  注重,固然PD模子供应了一些优异的功效,但它仍然是一个开辟中的模子。在有些实例中,你大概必要借助于COS模子才干会见PDF的特定功效性。一切的PD模子对象都供应前往响应的COS模子对象的办法。以是,在一样平常情形下,你城市利用PD模子,但PD模子力所不及时你能够间接操纵底层的COS模子。  上文对PDFBox作了大致上的先容,如今是举一些例子的时分了。我们从怎样读已存在的PDF文档入手下手:PDDocumentdocument=PDDocument.load("./test.pdf");  下面的语句剖析指定的PDF文件并在内存中创立其文档对象。思索各处理年夜文档时的效力成绩,PDFBox只在内存中存储文档布局,图象、内嵌字体和页面内容等对象将被缓存在一个一时文件中。  注重:PDDocument对象利用终了时必要挪用其close()办法来开释创立时利用的资本。  文本提取和Lucene整合  这是一个信息展示时期(aninformationretrievalage),不论信息寄存在哪一种媒体中,使用程序都应当撑持检索和索引。对信息举行构造和分类从而构成可检索的格局是很关头的。这关于文本文档和HTML文档来讲是很复杂的,但PDF文档包括大批的布局和元信息,提取文档内容决不是一件复杂的事变。PDF言语和Postscript类似,两者中的对象都是作为矢量绘制在页面的某些地位。比方:/Helv12Tf013.0847Td(HelloWorld)Tj  下面的指令将字体设为12号的Helvetica,移到下一行然后打印“HelloWorld”。这些命令流畅常是经由紧缩的,笔墨在屏幕上的显现按次其实不必定是文件中的字符呈现按次。因而,你偶然没法间接从原始PDF文档中提取字符串。但是,PDFBox成熟的文本提取算法使得开辟职员能够提取文档内容,就像在浏览器中出现的那样。  Lucene是ApacheJakarta项目标子项目,它是一个盛行的源代码开放的搜刮引擎库。开辟职员可使用Lucene来创立索引,并基于该索引对大批的文本内容举行庞大的检索。Lucene只撑持文本内容的检索,以是开辟职员必要将其他情势的数据转换为文本情势才干利用Lucene。比方,MicrosoftWord和StarOffice文档都必需先转换为文本情势才干增加到Lucene索引中。  PDF文件也不破例,但PDFBox供应一个特别的整合对象,这让在Lucene索引中包括PDF文档变得十分简单。将一个基础PDF文档转换为Lucene文档只必要一条语句:Documentdoc=LucenePDFDocument.getDocument(file);  这条语句剖析指定的PDF文档,提取其内容并创立一个Lucene文档对象。然后你就能够将该对象增加到Lucene索引中了。如上文所述,PDF文档中也包括作者信息和关头词等元数据,在索引PDF文档时对这些元数据举行跟踪时很主要的。表1列出了创立Lucene文档时PDFBox将填写(populate)的字段。  这类整合使得开辟职员能够轻松地利用Lucene来撑持PDF文档的检索和索引。固然,有些使用程序请求更成熟的文本提取办法。此时能够间接利用PDFTextStripper类,或承继该类来满意这类庞大的需求。  经由过程承继PDFTextStripper并掩盖showCharacter()办法,你能够从很多方面临文本提取举行把持。比方,利用x、y地位信息举行限定以提取特定文本块。你能够无效地疏忽一切的y坐标年夜于某个值的文本,如许文档头部内容就会被扫除。  另外一个例子。经常有这类情形:从表单创立了一组PDF文档,但这些原始数据被丧失了。也就是说,这些文档都包括一些你感乐趣的文本,并且这些文本都在类似的地位上,但添补文档的表双数据丧失了。比方,你有一些信封,在不异的地位上都着名字和地点信息。这时候,你就能够利用PDFTextStripper的派生类来提取希冀的字段,这个类就像一种截取屏幕地区的设备。  加密/解密  PDF的一个盛行特征是同意对文档内容举行加密、对会见举行把持,限定只能浏览未加密文档。PDF文档加密时接纳一个主暗码和一个可选的用户暗码。假如设定了用户暗码,那末PDF浏览器(如Acrobat)将在显现文档之条件示输出暗码。而主暗码则用于受权修正文档内容。  PDF标准同意PDF文档的创立者对用户利用Acrobat浏览器检察文档时的某些操纵举行限定。这些限定包含:打印修正内容提取内容  PDF文档平安的会商不在本文范围以内,有乐趣的读者能够参考PDF标准的相干部分。PDF文档的平安模子是可插拔式的(pluggable),你能够在加密文档时利用分歧的平安处置器(securityhandler)。对本文而言,PDFBox撑持尺度的平安处置器,它是年夜多半PDF文档所利用的。  加密文档时必需先指定一个平安处置器,然后利用一个主暗码和用户暗码举行加密。鄙人面的代码中,文档被加密,用户不必要敲进就能够在Acrobat中翻开它(没有设置用户暗码),可是该文档不成被打印。//loadthedocumentPDDocumentpdf=PDDocument.load("test.pdf");//createtheencryptionoptionsPDStandardEncryptionencryptionOptions=newPDStandardEncryption();encryptionOptions.setCanPrint(false);pdf.setEncryptionDictionary(encryptionOptions);//encryptthedocumentpdf.encrypt("master",null);//savetheencrypteddocument//tothefilesystempdf.save("test-output.pdf");  更具体的示例拜见PDFBox公布版中包括的加密工具类源代码:org.pdfbox.Encrypt。  很多使用程序能够天生PDF文档,但不撑持把持文档的平安选项。这时候PDFBox就能够用来在发送给用户之前截获并加密PDF文档。  表单整合  当使用程序的输入是一系列表单域的值时,供应将表单保留成文件的功效是很需要的。这时候PDF手艺将是一个很好的选择。开辟职员能够手动编写PDF指令来绘制图形、表格和文本。大概将数据存成XML情势并利用XSL-FO模版来创立PDF文档。但是,这些举措都是对照耗时,简单堕落,并且天真性也对照差。关于复杂的表单而言,一个更好的举措是创立模版,然后将给定的输出数据填进该模版,从而天生文档。  EmploymentEligibilityVerification是一个年夜多半人都熟习的表单,它又叫做“I-9表单”,拜见:http://uscis.gov/graphics/formsfee/forms/files/i-9.pdf  你可使用PDFBox公布版中的一个示例程序列出表单域名单:javaorg.pdfbox.examples.fdf.PrintFieldsi-9.pdf  另有一个示例程序用于向指定的域中拔出文本情势的数据:javaorg.pdfbox.examples.fdf.SetFieldi-9.pdfNAME1Smith  在Acrobat中翻开这个PDF文档你就会看到"LastName"域已被填写了。你也能够利用以下代码来完成不异的操纵:PDDocumentpdf=PDDocument.load("i-9.pdf");PDDocumentCatalogdocCatalog=pdf.getDocumentCatalog();PDAcroFormacroForm=docCatalog.getAcroForm();PDFieldfield=acroForm.getField("NAME1");field.setValue("Smith");pdf.save("i-9-copy.pdf");  上面的代码可用于提取方才填写的表单域的值:PDFieldfield=acroForm.getField("NAME1");System.out.println("FirstName="+field.getValue());  Acrobat撑持将表双数据导进或导出到一个特定的文件格局“表双数据格局”(FormsDataFormat)。这类文件有两类:FDF和XFDF。FDF文件寄存表双数据的格局与PDF不异,而XFDF则以XML格局寄存表双数据。PDFBox在一个类中处置FDF和XFDF:FDFDocument。上面的代码片段演示了怎样从下面的I-9表单导出FDF数据:PDDocumentpdf=PDDocument.load("i-9.pdf");PDDocumentCatalogdocCatalog=pdf.getDocumentCatalog();PDAcroFormacroForm=docCatalog.getAcroForm();FDFDocumentfdf=acroForm.exportFDF();fdf.save("exportedData.fdf");  PDFBox表单整合步骤:利用Acrobat或其他可视化工具创立PDF表单模版记下每一个必要的(desirable)表单域的称号将模版寄存在使用程序能够会见到的中央当PDF被哀求时,利用PDFBox剖析PDF模版添补指定的表单域将添补了局(PDF)前往给用户  工具  除上文先容的API以外,PDFBox还供应一系列命令行工具。表2列出了这些工具类并作冗长先容。  备注  PDF标准共有1172页之多,实在现切实其实是一浩荡工程。一样,PDFBox公布版中说它“正在举行中”,新的功效会渐渐地增加上往。它的次要缺点是从零入手下手创立PDF文档。但是,有一些源码开放的Java项目可用于弥补这个缺口。比方,ApacheFOP项目撑持从特别的XML文档天生PDF,这个XML文档形貌了要天生的PDF文档。别的,iText供应一个高层API用于创立表格和列表。  PDFBox的下一个版本将撑持新的PDF1.5对象流和交织援用流。然后将供应内嵌字体和图象的撑持。在PDFBox的勉力下,Java使用程序中的PDF手艺无望失掉充实的撑持。
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。
因胸联盟 该用户已被删除
21#
发表于 2015-6-8 11:53:28 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
小魔女 该用户已被删除
20#
发表于 2015-5-4 19:16:36 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
飘飘悠悠 该用户已被删除
19#
发表于 2015-4-28 14:16:13 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
海妖 该用户已被删除
18#
发表于 2015-4-28 12:43:18 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
分手快乐 该用户已被删除
17#
发表于 2015-4-16 01:10:20 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
变相怪杰 该用户已被删除
16#
发表于 2015-4-12 23:20:30 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
谁可相欹 该用户已被删除
15#
发表于 2015-4-11 10:18:57 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
莫相离 该用户已被删除
14#
发表于 2015-3-27 09:05:41 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
乐观 该用户已被删除
13#
发表于 2015-3-19 06:09:12 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
admin 该用户已被删除
12#
发表于 2015-3-11 18:08:42 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
精灵巫婆 该用户已被删除
11#
发表于 2015-3-11 13:50:05 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
活着的死人 该用户已被删除
10#
发表于 2015-3-3 22:37:39 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
灵魂腐蚀 该用户已被删除
9#
发表于 2015-2-15 23:39:08 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
只想知道 该用户已被删除
8#
发表于 2015-2-6 10:39:08 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
第二个灵魂 该用户已被删除
7#
发表于 2015-2-6 02:04:00 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
再现理想 该用户已被删除
6#
发表于 2015-2-1 17:27:39 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
5#
发表于 2015-1-26 20:10:52 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
飘灵儿 该用户已被删除
地板
发表于 2015-1-25 13:59:58 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-24 09:14:29 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 08:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表