搜档网
当前位置:搜档网 › 用Java读取Word文档

用Java读取Word文档

用Java读取Word文档
用Java读取Word文档

用Java读取Word文档

由于Word的编码方式比较复杂,所以Word文档不可能通过流的方式直接读取;当然如果Word可以转化成TXT文件就可以直接读取了;目前读取Word比较好的开源工具是Poi及Jacob,感觉Poi读取功能要比Jacob略逊一筹,毕竟Jacob可以直接调用Word的COM组件;但是微软产品不开放源码,所以Jacob读取Word文档也只能是摸着石头过河,一点一点破解了。

Jacob读取Word内容,由于Word内容的复杂性,读取也是非常不方便的,目前可以有"按段落读取","按书签读取"及"按照表格读取"等几种形式。

示例讲解(通过Java FileReader,Jacob两种方式读取Word内容)

一.通过java流读取Word内容

复制代码

1.import java.io.BufferedReader;

2.import java.io.FileReader;

3.import java.io.IOException;

4.

5.public class ReadWordByStream {

6.public static void main(String[] args) throws IOException {

7. String rowContent = new String();

8. String content = new String();

9. BufferedReader in = new BufferedReader(new FileReader("d:\\test3.doc"));

10. while ((rowContent = in.readLine()) != null) {

11.content = content + rowContent + "\n";

12. }

13. System.out.println(content.getBytes());

14. System.out.println(new String(content.getBytes(),"utf-8"));//因为编码方式不

同,不容易解析

15. in.close();

16.}

17.

18.}

二.通过Jacob读取Word内容

复制代码

1.import com.jacob.activeX.ActiveXComponent;

2.import https://www.sodocs.net/doc/ae8336883.html,Thread;

3.import https://www.sodocs.net/doc/ae8336883.html,.Dispatch;

4.import https://www.sodocs.net/doc/ae8336883.html,.Variant;

5.

6.public class WordReader {

7.public static void main(String args[]) {

8. ComThread.InitSTA();// 初始化com的线程

9. ActiveXComponent wordApp = new ActiveXComponent("Word.Application

"); // 启动word

10. // Set the visible property as required.

11. Dispatch.put(wordApp, "Visible", new Variant(true));// //设置word可见

12. Dispatch docs = wordApp.getProperty("Documents").toDispatch();//所有文档

窗口

13.// String inFile = "d:\\test.doc";

14.// Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,

15.// new Object[] { inFile, new Variant(false),new Variant(false) },//参数3,

false:可写,true:只读

16.// new int[1]).toDispatch();//打开文档

17.

18. Dispatch doc = Dispatch.call(docs, "Add").toDispatch(); //创建一个新文档

19. Dispatch wordContent = Dispatch.get(doc, "Content").toDispatch(); //取

得word文件的内容

20. Dispatch font = Dispatch.get(wordContent, "Font").toDispatch();

21. Dispatch.put(font, "Bold", new Variant(true)); // 设置为粗体

22.Dispatch.put(font, "Italic", new Variant(true)); // 设置为斜体

23.Dispatch.put(font, "Underline", new Variant(true));

24.Dispatch.put(font, "Name", new Variant("宋体"));

25.Dispatch.put(font, "Size", new Variant(14));

26. for(int i=0;i<10;i++){//作为一个段落

27.Dispatch.call(wordContent, "InsertAfter", "current paragraph"+i+" ");

28. }

29. for(int j=0;j<10;j++){//作为十个段落

30. Dispatch.call(wordContent, "InsertAfter", "current paragraph"+j+"\r");

31.}

32. Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs")

33. .toDispatch(); //所有段落

34. int paragraphCount = Dispatch.get(paragraphs, "Count").getInt();

35. System.out.println("paragraphCount:"+paragraphCount);

36.

37. for (int i = 1; i <= paragraphCount; i++) {

38.Dispatch paragraph = Dispatch.call(paragraphs, "Item",

39.new Variant(i)).toDispatch();

40.Dispatch paragraphRange = Dispatch.get(paragraph, "Range")

41..toDispatch();

42.String paragraphContent = Dispatch.get(paragraphRange, "Text")

43..toString();

44.System.out.println(paragraphContent);

45.//Dispatch.call(selection, "MoveDown");

46. }

47. // WordReader.class.getClass().getResource("/").getPath().substring+"test.doc";

48. Dispatch.call(doc, "SaveAs","d:\\wordreader.doc");

49. // Close the document without saving changes

50. // 0 = wdDoNotSaveChanges

51. // -1 = wdSaveChanges

52. // -2 = wdPromptToSaveChanges

53. ComThread.Release();//释放com线程

54. Dispatch.call(docs, "Close", new Variant(0));

55. docs = null;

56. Dispatch.call(wordApp,"Quit");

57. wordApp = null;

58.}

59.}

用Java简单的读取word文档中的数据:

第一步:下载tm-extractors-0.4.jar

下载地址:

https://www.sodocs.net/doc/ae8336883.html,/browser/elated-core/trunk/lib/tm-extractors-0.4.jar?rev =46并把它放到你的classpath路径下面。

第二步:简单的程序.(WordReader .java)

前提是你的E盘下有个Strust.doc文件。

import java.io.File;

import java.io.FileInputStream;

import org.textmining.text.extraction.WordExtractor;

public class WordReader

public static String readDoc(String doc) throws Exception { // 创建输入流读取doc文件

FileInputStream in = new FileInputStream(new File(doc)); WordExtractor extractor = null;

String text = null;

// 创建WordExtractor

extractor = new WordExtractor();

// 对doc文件进行提取

text = extractor.extractText(in);

return text;

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try{

String text = WordReader.readDoc("E:/Strust.doc"); System.out.println(text);

}catch(Exception ex){

ex.printStackTrace();

}

}

}

这样就简单的完成了从word中读取数据了。你可以把它生成一个txt的文件。

JAVA读取word文件---poi

1。读取word文件有两种方法,用jacob包,可以修改生成word文件内容。如果只读取word里的文本内容的话,可以用poi读取word文件,先到

https://www.sodocs.net/doc/ae8336883.html,/maven2/org/textmining/tm-extractors/下载

tm-extractors-0.4.jar包

2。读取word里的文本内容的示列代码

import java.io.*;

import org.textmining.text.extraction.WordExtractor;

public class TestPoi {

public TestPoi() {

}

public static void main(String args[]) throws Exception

{

try{

FileInputStream in = new FileInputStream ("D:/szqxjzhbase/doc/修改后

/2001-2005年/重大致灾暴雨/20050819-20/技术总结/2005年8月20日一次大暴雨过程

低空急流脉动与强降水关系分析 .doc");

// FileInputStream in = new FileInputStream ("D:/szqxjzhbase/技术测试

/新建 Microsoft Word 文档.doc");

WordExtractor extractor = new WordExtractor();

System.out.println(in.available());

String str = extractor.extractText(in);

// System.out.println("the result length is"+str.length());

System.out.println(str);

}catch(Exception e){

e.printStackTrace();

}

}

}

3。问题:有时候有图片读的时候会报个错,但在图片前面加个回车符号就好了,可能与

这个包的内部机制有关

如何能让Java生成复杂Word文档(1)

先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker 模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 AD:客户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。 POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。 iText操作Excel还行。对于复杂的大量的word也是噩梦。 直接通过JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。 Word从2003开始支持XML格式,用XML还做就很简单了。 大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml 翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 看看实际效果 首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,图中红线的部分就是我要输出的部分:

将编辑好的文档另存为XML 再用Firstobject free XML editor将xml中我们需要填数据的地方打上FreeMarker标记

完整word版,Java实习总结4000字

Java实习总结4000字 一转眼,这段实习的生活过去了,回首这段时间的实习,的收获 是学到了更多的知识,增加了自己的经验,锻炼了自己,提升了自己 的水平。下面,我将实习的工作总结如下: 在注重素质教育的今天,社会实习一直被视为培养德、智、体、美、劳全面发展的跨世纪优秀人才的重要途径。毕业实习是学校教育 向课堂外的一种延伸,也是推动素质教育进程的重要手段、大学生进 入社会的桥梁。它有助于当代大学生接触社会,了解社会。同时,实 习也是大学生学习知识、锻炼才干的有效途径,更是大学生服务社会、回报社会的一种良好形式。鉴于毕业实习的以上的优点,我怀着一颗 真诚学习的心成为了其中的一员。 来到实习单位,我首先面对的是个人角色的转换及整个人际关系 的变化。学校里成绩不错的学生变成了未知领域里从头学起的实习生,而熟悉的校园也变成了陌生的企业单位,身边接触的人变成了我的前 辈我的同事我的师傅,相处之道完全不同。在这样的转变中,对于沟 通的认知显得非常苍白。于是第一次觉得自己并没有本以为的那么善 于沟通。当然,适合新的环境是需要过程的,所以我相信时间和实践 会让我很快完成这种角色的转变,真正融入到工作单位这个与学校全 然不同的社会大环境中。我还要努力实践,自觉实行角色转化。只有 将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实 践才能使理论得以检验。同样,一个人的价值也是通过实践活动来实 现的,也只有通过实践才能锻炼人的品质,彰现人的意志。 在公司中做不出成绩时,会有来自各方面的压力,老板的眼色同 事的嘲讽。而在学校,有同学老师的关心和支持,每日仅仅上上课, 很轻松。常言道:工作一两年胜过十多年的读书。两个月的实习时间 虽然不长,但是我从中学到了很多知识,关于做人,做事,做学问。 只有拥有自信才能够克服一切,去实现自己的理想,创造自己的人生。

java解析FSN文件

package action; import java.util.ArrayList; import tools.FsnTools; import bean.FsnBody; import bean.FsnModel; public class FsnReaderAction { public final static int intstep=2; //Uint16字节长度 public final static int stringstep=4; //Uint32字节长度 public final static int fsnHeadLengh=32;//fsn文件头字节长度 public final static int fsnPerBodyNoImg=100; //fsn文件体每条记录,不包括图像信息的字节长度 public final static int fsnPerBodyImg=1644; //fsn文件体每条记录,包括图像信息的字节长度 public int filePos=0; //fsn文件字节流当前指针位置 public FsnModel fm; //本实例解析的FsnMedel对象 public String fsnFilePath ;//FSN文件的存储完整路径,包括文件名 public FsnReaderAction(String filePath){ this.fsnFilePath=filePath; } public FsnModel readFsnFile() throws Exception { // FsnModel ret=null; try{ this.fm=new FsnModel(this.fsnFilePath); //hzyimport 把文件转成字节流数组 byte[] fsnbytes =FsnTools.toByteArray(this.fsnFilePath); this.fm.setSize(fsnbytes.length); System.out.println("File Lengh: "+fsnbytes.length); // 读取头文件 setHead(fsnbytes); long counter = this.fm.getCounter(); // 冠字号信息条数// System.out.println("this.fm.getHeadString()[2]="+this.fm.getHeadStr ing()[2]); int size = this.fm.getHeadString()[2] != 0x2D ? fsnPerBodyImg: fsnPerBodyNoImg; // System.out.println("this.fm.getHeadString()[2] ="+this.fm.getHeadString()[2] ); // System.out.println("counter ="+counter); // System.out.println("size="+size); // System.out.println("counter =* size"+counter * size); // System.out.println("fsnHeadLengh="+fsnHeadLengh);

Java生产WORD并下载到本地

1.为你的项目导入freeMarker包 我的项目是依靠maven来维护依赖的,所以引入很方便,只需要在pom文件中加入下面这个依赖就好 [html]view plain copy 1. 2.org.freemarker 3.freemarker 4.2.3.23 5. 如果还是比较传统的话,就像那个链接里的项目一样,把jar包导入项目吧 2.依据模板动态生成word文档,首先你得有个模板 模板是doc类型就好,注意不是docx,docx没有尝试,doc类型已经满足了我的需求,朋友们如果尝试成功了可以告诉我一下 test.doc,注意“产品品质证明书”是一张图片哦,图片会漂亮的留在生成的新文档中。将变量替换成${xxx}即可,这里只选了两 个变量 3.点击文件->另存为将test.doc保存为xml类型,即Word XML文档.xml类型,得到test.xml 4.用notepad或者sublime打开test.xml,你会发现${xxx}会被分割成 ${*********xxx********)的样子,将*******删除,保证它又成了完整的变量 标签,像这样

5.将文件已utf-8编码保存,另存为为.ftl,找不到该格式直接改文件后缀名就行,这样得到test.ftl 6.前台触发事件 我的项目是基于SpringMVC的,所以前台触发只需要在view层的文件里加个按钮事件即可,直接上代码 [javascript]view plain copy 1.function generateMillCertificate(id) {//点击下载按钮触发的事件 2. window.location.href = '../deliveryOrder/exportMillCertificate?id=' + id; 3. } 7.后台生成文件,并返回给客户的浏览器 这里又分为两步 a.controller层接收请求,根据参数拼凑数据,放在map中 [java]view plain copy 1./*** 2. * 导出Word材质单 3. * 4. * @return 5. * @throws Exception 6. */ 7.@RequestMapping(value = "exportMillCertificate", method = RequestMethod. GET) 8.@ResponseBody 9.public void exportMillCertificate(HttpServletRequest request, 10. HttpServletResponse response) throws Exception { 11.//获得数据,系统相关,就不展示了 12. Map map = new HashMap(); 13. map.put("customerShortName",deliveryOrder.getRepositoryName()); 14. map.put("productName",deliveryOrderDetail.getProductName()); 15. WordUtils.exportMillCertificateWord(request,response,map); 16. } b.工具类WordUtils利用传来的map和将要返回给用户的HTTPServletReponse,将map里的数据和模板中${xxx}标签对应的变量值填入, 生成新的文档,通过response返回给浏览器并提供用户下载 [java]view plain copy 1.public class WordUtils { 2.//配置信息,代码本身写的还是很可读的,就不过多注解了 3.private static Configuration configuration = null; 4.//这里注意的是利用WordUtils的类加载器动态获得模板文件的位置

(完整word版)JAVA代码规范详细版

JAVA代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。 1.1.2 达意 达意是指,标识符能准确的表达出它所代表的意义,比如:newSupplier, OrderPaymentGatewayService等;而supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。 1.1.3 简洁 简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。 1.1.4 骆驼法则 Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是supplier_name, add_new_contract。

java操作word可操作书签

最近有个需求,在word模板文档上设置书签,然后从数据库中查询数据,填充到word 文档书签位置,刚拿到需求时,使劲在网上找资料。幻想第三方jar包,帮我实现。有Apatch 的POI,java2word,jcob等,一直让我无法实现。POI操作word只能获取word中的书签,并不能进行操作.java2word可以实现,但是除了包以外,还要一个dll文件放在system32文件夹下,环境部署在linux服务器上,谁允许你放这样的文件,结果死心了.下面新建一个word2007文件告诉大家不用第三方技术怎么一一实现。 现在新建一个word,在请输入用户名处添加书签userName,请输入年龄处添加书签age Word2007版本其实就是zip格式,将新建word后缀名改.zip,解压会发现,里面全是文件夹,打开word文件夹会有一个文件,在word所有内容,都在这xml文件中, 请输入用户名 这是新建书签处的内容,细心的会发现,书签处内容在 标签之间,标签中的w:id跟w:name 标识书签的唯一,中间是书签处的内容,会不会可以这样呢,找到用dom或者sax解析这个xml文档找到标签,然后找到标签,再找到标签里面的标签内容,替换就Ok了呢。一开始我就这样想的。但是你会发现,不是这样配套的,如果是这样配套的,那按照前面的说的直接解析找到标签就OK了。 分析xml文件你会发现,其实标签跟标签是同级的,只是结束方式不同而已,所以算是兄弟节点,可以不可以找到的兄弟节点,也就是标签,然后找到标签,替换其文本。其实w3c中Element对象中提供了获取兄弟节点的方法,getNextSibling()获取下一个兄弟节点。按照分析的思路是可以实现的。但是会不会有疑问,如果的下一个兄弟节点会不会不是标签呢,是的,如果书签处无内容,就会是这样的

java操作word(内部资料)

JAVA操作word Java操作Microsoft Word之jacob(1) 现在我们一起来看看,用J1ava如何操作Microsoft Word。 jacob,官网是https://www.sodocs.net/doc/ae8336883.html,/jacob 这是一个开源的工具。最新版本1.7 官方的解释是:The JACOB Project: A JAva-COM Bridge 这是官方对下载文件的说明: jacob.jar: a JAR file for the java classes which you must add to your CLASSPATH. The package names replace com.ms with com.jacob (for example https://www.sodocs.net/doc/ae8336883.html,.Variant maps to https://www.sodocs.net/doc/ae8336883.html,.Variant. jacob.dll: a small Win32 DLL which you must add to your PATH. samples: provided in Java source and compiled form to demonstrate various features of the product. In particular, a set of wrapper classes for Microsoft? ADO are provided as samples. 开发环境: JDK 1.6 MyEclipse Enterprise Workbench Version: 7.0 Milestone-1 Tomcat 5.5.27 现在MyEclipse中新建一个项目jacob,将jacob的jar包放到该项目的类库中。 我的jacob版本是1.14.3 。

java根据模板生成pdf文件并导出

java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf 文件(注:如果没有这个软件可以通过我的百度云下载,链接:https://www.sodocs.net/doc/ae8336883.html,/s/1pL2klzt)如果无法下载可以联系博主。4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始 进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。如果你想修改fill1等信息,可以进行修改)5.做完上面的工作后,直接"另存为"将pdf存储就可以 ****************************************************************** *********** 以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序: 1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy print?<!--

https://https://www.sodocs.net/doc/ae8336883.html,/artifact/com.itextpdf/itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> [html] view plain copy print?<!-- https://https://www.sodocs.net/doc/ae8336883.html,/artifact/com.itextpdf/itext-asian --> <span style="white-space:pre;"> </span><dependency> <span style="white-space:pre;"> </span> <groupId>com.itextpdf</groupId> <span style="white-space:pre;"> </span> <artifactId>itext-asian</artifactId> <span style="white-space:pre;"> </span> <version>5.2.0</version> <span style="white-space:pre;"> </span></dependency> 2.下面就是生成pdf代码了 [java] view plain copy print?import java.io.ByteArrayOutputStream; import

完整word版,Java实习总结3000字,推荐文档

Java实习总结3000字 篇一:Java实习总结3000字 一转眼,这段实习的生活过去了,回首这段时间的实习,最大的收获是学到了的知识,增加了自己的经验,锻炼了自己,提高了自己的能力。下面,我将实习的工作总结如下:在注重素质教育的今天,社会实习一直被视为培养德、智、体、美、劳全面发展的跨世纪优秀人才的重要途径。毕业实习是学校教育向课堂外的一种延伸,也是推进素质教育进程的重要手段、大学生进入社会的桥梁。它有助于当代大学生接触社会,了解社会。同时,实习也是大学生学习知识、锻炼才干的有效途径,更是大学生服务社会、回报社会的一种良好形式。鉴于毕业实习的以上的优点,我怀着一颗真诚学习的心成为了其中的一员。 来到实习单位,我首先面对的是个人角色的转换及整个人际关系的变化。学校里成绩不错的学生变成了未知领域里从头学起的实习生,而熟悉的校园也变成了陌生的企业单位,身边接触的人变成了我的前辈我的同事我的师傅,相处之道完全不同。在这样的转变中,对于沟通的认知显得非常苍白。于是次觉得自己并没有本以为的那么善于沟通。当然,适应新的环境是需要过程的,所以我相信时间和实践会让我很快完成这种角色的转变,真正融入到工作单位这个与学校

全然不同的社会大环境中。我还要努力实践,自觉进行角色转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是通过实践活动来实现的,也只有通过实践才能锻炼人的品质,彰现人的意志。 在公司中做不出成绩时,会有来自各方面的压力,老板的眼色同事的嘲讽。而在学校,有同学老师的关心和支持,每日只是上上课,很轻松。常言道:工作一两年胜过十多年的读书。两个月的实习时间虽然不长,但是我从中学到了很多知识,关于做人,做事,做学问。只有拥有自信才能够克服一切,去实现自己的理想,创造自己的人生。 实习是个人综合能力的锻炼,作为一名新时代的新青年更应该把学习作为保持工作积极性的重要途径。像我这种文凭不高的人,心里就有一种很渴望的感觉,明白了自己与社会所需的要求,因为现在毕业求职,特别是对于像自己一般的人,的时间是社会职业选择自己面试,的不是自己去选择职业,这应该就是所谓的先就业再择业吧。所以自己会把心态放正,在公司的时候先全面发展,等过段再看看精于哪个方面,然后向那个方向努力发展。 在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名年轻同志更应该把学习作为保持工作积极性的重要途径。走上工作岗位后,我积极响应单位号召,结

JAVA读取WORD文档解决方案

Java读取word文档解决方案 java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。 -----实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。 -----实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。 1、采用字节的形式读取rtf模板内容 2、将可变的内容字符串转为rtf编码 3、替换原文中的可变部分,形成新的rtf文档 主要程序如下:

以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。运行源代码前提: c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ 目录下生成文件名如:21时15分19秒_cheney_记录.rtf的文件。。。。。文件名是在程序中指定的呵呵。由于是由商业软件中拆分出的demo所以只是将自己原来的写的程序分离,合并在一个java文件中,所以有的方法在示例程序中看似多余,没有必要那么麻烦。 对于替换部分需要循环的特例程序,我不好拆分,里面很容易暴露商业软件的东西,所以就不贴了,有需要的话可以加我QQ或者MSN,一起讨论呵呵。附件传了半天也没有传上去,没有办法只有这样搞了呵呵。模板文件附件无法存放,需要的直接联系呵呵。其实直接看以下的java程序部分,就会明白

JAVA导出WORD与EXCEL

package ais.mytest.web; /** * 功能:主要实现数据导出Excel和Word功能* 日期:2008-2-28 */ import ais.basic.service.BasicUtil; import https://www.sodocs.net/doc/ae8336883.html,mons.file.service.FileService; import ais.framework.web.BaseAction; import ais.mytest.model.Employeer; import ais.mytest.service.IemployeerService; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.text.DecimalFormat; import jxl.write.NumberFormat; import java.util.List; import javax.servlet.ServletOutputStream; import jxl.Cell; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.UnderlineStyle; import jxl.format.VerticalAlignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.BoldStyle; import jxl.format.Colour; import jxl.write.Blank; import jxl.write.DateFormat; import jxl.write.DateTime; import https://www.sodocs.net/doc/ae8336883.html,bel; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableImage; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; //import com.ibm.icu.text.SimpleDateFormat; //import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.Font; import com.lowagie.text.Image;

java导出word

java jacob 操作word 文档,进行写操作,如生成表格,添加图片jacob-1.15-M3.zip jacob-1.15-M3-x86.dll copy 到c:\\windows\system32 引入jacob.jar 示例代码 import java.io.File; import com.jacob.activeX.ActiveXComponent; import https://www.sodocs.net/doc/ae8336883.html,.Dispatch; import https://www.sodocs.net/doc/ae8336883.html,.V ariant; class WordBean { // 代表一个word 程序 private ActiveXComponent MsWordApp = null; // 代表进行处理的word 文档 private Dispatch document = null; public WordBean() { // Open Word if we\'ve not done it already if (MsWordApp == null) { MsWordApp = new ActiveXComponent("Word.Application"); } } // 设置是否在前台打开word 程序, public void setVisible(boolean visible) { MsWordApp.setProperty("Visible", new V ariant(vis ible)); // 这一句作用相同 // Dispatch.put(MsWordApp, "Visible", new V ariant(visible)); } // 创建一个新文档 public void createNewDocument() { // Find the Documents collection object maintained by Word // documents表示word的所有文档窗口,(word是多文档应用程序) Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch(); // Call the Add method of the Documents collection to create // a new document to edit document = Dispatch.call(documents, "Add").toDispatch(); } // 打开一个存在的word文档,并用document 引用引用它

java深度处理word

JAVA操作word jacob(1) 现在我们一起来看看,用Java如何操Word。 jacob,官网是https://www.sodocs.net/doc/ae8336883.html,/jacob 这是一个开源的工具。最新版本1.7 官方的解释是:The JACOB Project: A JAva-COM Bridge 开发环境: JDK 1.6 MyEclipse Enterprise Workbench Version: 7.0 Milestone-1 Tomcat 5.5.27 现在MyEclipse中新建一个项目jacob,将jacob的jar包放到该项目的类库中。 我的jacob版本是1.14.3 。

下面这一步非常重要,就是拷贝jacob目录中jacob-1.14.3-x86.dll文件到系统环境变量目录中一般情况就放在当前jdk中bin目录下。

。 这里有一个MSWordManager 类,是jacob官方发布的工具类,里面有大多数Java操作MS Office的工具。 package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.jacob.activeX.ActiveXComponent; import https://www.sodocs.net/doc/ae8336883.html,.Dispatch; import https://www.sodocs.net/doc/ae8336883.html,.Variant; public class MSWordManager { // word文档

java生成word文档

package com.sample; import java.awt.Color; import java.io.FileOutputStream; import java.io.IOException; import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.FontFactory; import com.lowagie.text.Image; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.Table; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.rtf.RtfWriter2; /** * * @author wangyanjun * @email bd_wyj@https://www.sodocs.net/doc/ae8336883.html, * @createDate Jun 12, 2008 */ public class CreateWordDemo { public void createDocContext(String file) throws DocumentException, IOException { // 设置纸张大小 Document document = new Document(PageSize.A4); // 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中 RtfWriter2.getInstance(document, new FileOutputStream(file)); document.open(); // 设置中文字体 BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // 标题字体风格 Font titleFont = new Font(bfChinese, 12, Font.BOLD); // 正文字体风格 Font contextFont = new Font(bfChinese, 10, Font.NORMAL); Paragraph title = new Paragraph("标题");

java用poi实现对word读取和修改操作

java用poi实现对word读取和修改操作 新增WordUtil类,将代码拷进去直接运行即可 package com.cjhxfund.ats.fm.instr; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.poi.POIXMLDocument; import https://www.sodocs.net/doc/ae8336883.html,ermodel.XWPFDocument; import https://www.sodocs.net/doc/ae8336883.html,ermodel.XWPFParagraph; import https://www.sodocs.net/doc/ae8336883.html,ermodel.XWPFRun; import https://www.sodocs.net/doc/ae8336883.html,ermodel.XWPFTable; import https://www.sodocs.net/doc/ae8336883.html,ermodel.XWPFTableCell; import https://www.sodocs.net/doc/ae8336883.html,ermodel.XWPFTableRow; public class WordUtil { public static void searchAndReplace(String srcPath, String destPath, Map map) { try { XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(srcPath)); // 替换段落中的指定文字 Iterator itPara = document.getParagraphsIterator(); while (itPara.hasNext()) { XWPFParagraph paragraph = (XWPFParagraph) itPara.next(); //String s = paragraph.getParagraphText(); Set set = map.keySet(); Iterator iterator = set.iterator(); while (iterator.hasNext()) { String key = iterator.next(); List runs=paragraph.getRuns();

JAVA动态生成word和pdf

java生成word的几种方案 1、Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。 使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。 2、Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word 等文件。他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。 3、Java2word是一个在java程序中调用MS Office Word 文档的组件(类库)。该组件提 供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括:打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。填充数据到表格中读取表格数据,1.1版增强的功能:指定文本样式,指定表格样式。如此,则可动态排版word 文档。 4、iText操作Excel还行。对于复杂的大量的word也是噩梦。用法很简单, 但是功能很少, 不 能设置打印方向等问题。 5、JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。 6、用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003 或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 java生成pdf方案总结 1. Jasper Report生成pdf:设计思路是先生成模板,然后得到数据,最后将两者整合得到结果。但是Jasper Report的问题在于,其生成模板的方式过于复杂,即使有IDE的帮助,我们还是需要对其中的众多规则有所了解才行,否则就会给调试带来极大的麻烦。 2. openoffice生成pdf:openoffice是开源软件且能在windows和linux平台下运行。 3. itext + flying saucer生成pdf:itext和flying saucer都是免费开源的,且与平台无关,结合css和velocity技术,可以很好的实现。 一般使用第三种方案比较多,它实现的步骤是非常简单的。

(完整word版)java实习周记25篇

第一周 实习第一个礼拜,算是适应期。主要了解一些公司的背景、产品、发展方向等。刚到实习公司,不是像学校里的朝九晚五,而是朝八晚九。我们不可能简单的了解一些企业文化,简单的学学新的知识就可以了,我们的这个实习必将是一个繁忙的实习,也必将是一个充实的,进步的实习。来到这里,我们要忘掉大学里自由的作息时间,克服困难,养成良好的工作生活习惯。基于各方面的原因,虽然在去之前我们做了比较充足的准备,但还是遇到了一些困难,例如学习时间长,实战比较繁多,但时间又比较的短,难以保证按时按质按量完成。下午下了班,员工们都回去了,我还在那儿练习,一直到晚上9点,才能回住处休息。中午也没有休息的地方,只能趴在电脑前休息一会,一两周下来,相当地疲惫。但我们都明白自己来实习的任务,都坚持着完成自己的任务和使命。这个星期熟悉了工作环境、java编程的环境配置。等慢慢熟悉起来,做起事情也越来越顺手了.简单的总结为几个字,那就是:多看,多问,多观察,多思考! 第二周 实习第二个礼拜,主要是熟悉java的基础语法,把基础打扎实,以后在开发中才能如鱼得水。学习总结如下几点: 1、类之间的关系:关联、聚合、继承、实现和多态。 2、基本数据类型:整数型、浮点型、字符型、布尔型。 3、常用逻辑语句和循环语句:switch只支持int类型判断,没有写break易穿透至下一个循环,jdk7.0貌似增强了支持数据类型。Break:强行退出循环;Continue:跳出当前循环。 5、修饰符:pbulic,private,protected,default。设置访问权限。

6、Static关键字:静态修饰符,它修饰的方法、类和变量可以全局调用。 7、Final关键字:禁止重写。 8、This关键字:指向自身引用。 9、string:是不可变的字符序列。(两个string变量必须用copy的方式在内存中new出新的数据块) 10、stringBuffer:是可变的字符序列,可以直接添加字符。 第三周 实习第三个礼拜,主要是熟悉java的高级语法(核心) 继承:子类继承父类的所有属性和方法,如果方法和属性被private修饰,子类则无法读取。子类使用Super关键字继承。父类无法调用子类方法。 构造方法:方法名称必须与类名相同,且没有返回值。Object类是所有类的父类,即java中的根类。无参构造方法默认继承object的。(构造方法的重载,实现不同参数的构造) 重载:方法相同,参数类型不同,数量不同。构造方法中也常使用方法重载。重写:重写方法必须和被重写方法具有相同参数列表、相同方法和相同返回值。重写方法不能使用比被重写方法更严格的访问权限。 抽象:抽象类被继承后,方法必须被重写并实现,否则子类也还是抽象类。抽象方法只需声明,无需实现。接口:实现关键字implements。接口中所有成员变

相关主题