java word 操作 java word转pdf - 电脑|办公 - 电脑办公-杀毒安全-网络-V3学习网
微商网
 
 
导航:首页 |电脑|办公|正文

java word 操作 java word转pdf

时间:2021-04-16 09:31:08
java操作word 的有哪几种方式java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,
作者:

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文档主要程序如下:public String bin2hex(String bin) {char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = bin.getBytes();int bit;for (int i = 0; i > 4;sb.append("\\"");sb.append(digital[bit]);bit = bs[i] & 0x0f;sb.append(digital[bit]);}return sb.toString(); }public String readByteRtf(InputStream ins, String path){ String sourcecontent =""; try{ ins = newFileInputStream(path); byte[] b= new byte[1024];if (ins == null) {System.out.println("源模板文件不存在");}int bytesRead = 0;while (true) {bytesRead = ins.read(b, 0, 1024); // return final read bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new String(b, 0, bytesRead); // convert to stringusing bytes} }catch(Exception e){ e.printStackTrace(); }

Java如何操作Word,Excel,PDF文档?

Java Excel API 文档 http:www.andykhan.comjexcelapi 1、一个jaco操作Wod的例子,其他操作excel,pdf的sample里都有 impot java.io.File; impot com.jaco.com.*; impot com.jaco.activeX.*; pulic class WodTest { pulic static void main(Sting[] ags) { WodBean wod=new WodBean(); wod.openWod(tue); wod.ceateNewDocument(); wod.insetText("Hello wod."); } } impot com.jaco.activeX.*; impot com.jaco.com.*; pulic class WodBean extends java.awt.Panel { pivate ActiveXComponent MsWodApp = null; pivate Dispatch document = null; pulic WodBean() { supe(); } pulic void openWod(oolean makeVisile) { Open Wod if we"ve not done it aleady if (MsWodApp == null) { MsWodApp = new ActiveXComponent("Wod.Application"); } Set the visile popety as equied. Dispatch.put(MsWodApp, "Visile", new Vaiant(makeVisile)); } pulic void ceateNewDocument() { Find the Documents collection oject maintained y Wod Dispatch documents = Dispatch.get(MsWodApp,"Documents").toDispatch(); Call the Add method of the Documents collection to ceate a new document to edit document = Dispatch.call(documents,"Add").toDispatch(); } pulic void insetText(Sting textToInset) { Get the cuent selection within Wod at the moment. If a new document has just een ceated then this will e at the top of the new doc Dispatch selection = Dispatch.get(MsWodApp,"Selection").toDispatch(); Put the specified text at the insetion point Dispatch.put(selection,"Text",textToInset); } pulic void saveFileAs(Sting filename) { Dispatch.call(document,"SaveAs",filename); } pulic void pintFile() { Just pint the cuent document to the default pinte Dispatch.call(document,"PintOut"); } pulic void closeDocument() { Close the document without saving changes 0 = wdDoNotSaveChanges -1 = wdSaveChanges -2 = wdPomptToSaveChanges Dispatch.call(document, "Close", new Vaiant(0)); document = null; } pulic void closeWod() { Dispatch.call(MsWodApp,"Quit"); MsWodApp = null; document = null; } }

java操作word的组件(或技术)有哪些?

JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法 OFFICE文档使用POI控件,PDF可以使用PDFBOX0.7.3控件,完全支持中文,用XPDF也行,不过感觉PDFBOX比较好,而且作者也在更新。

水平有限,万望各位指正 WORD: impot og.apache.lucene.document.Document; impot og.apache.lucene.document.Field; impot og.apache.poi.hwpf.extacto.WodExtacto; impot java.io.File; impot java.io.InputSteam; impot java.io.FileInputSteam; impot com.seach.code.Index; pulic Document getDocument(Index index, Sting ul, Sting title, InputSteam is) thows DocCenteException { Sting odyText = null; ty { WodExtacto ex = new WodExtacto(is);is是WORD文件的InputSteam odyText = ex.getText(); if(!odyText.equals("")){ index.AddIndex(ul, title, odyText); } }catch (DocCenteException e) { thow new DocCenteException("无法从该Mociosoft Wod文档中提取内容", e); }catch(Exception e){ e.pintStackTace(); } } etun null; } Excel: impot og.apache.lucene.document.Document; impot og.apache.lucene.document.Field; impot og.apache.poi.hwpf.extacto.WodExtacto; impot og.apache.poi.hssf.usemodel.HSSFWokook; impot og.apache.poi.hssf.usemodel.HSSFSheet; impot og.apache.poi.hssf.usemodel.HSSFRow; impot og.apache.poi.hssf.usemodel.HSSFCell; impot java.io.File; impot java.io.InputSteam; impot java.io.FileInputSteam; impot com.seach.code.Index; pulic Document getDocument(Index index, Sting ul, Sting title, InputSteam is) thows DocCenteException { StingBuffe content = new StingBuffe(); ty{

java操作word文件有什么好的方法

1. 初始化com的线程,非常重要,否则第二次创建com对象的时候会出现can"t co-create object异常 (参见jacob的帮助文档),完成操作com组件后要调用 realease方法 ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法 2. 初始化word应用程序,新建一个空白文档,取得文档内容对象//Instantiate objWord //Declare word object ActiveXComponent objWord = new ActiveXComponent("Word.Application"); //Assign a local word object Dispatch wordObject = (Dispatch) objWord.getObject(); //Create a Dispatch Parameter to show the document that is opened Dispatch.put((Dispatch) wordObject, "Visible", new Variant(true));// new Variant(true)表示word应用程序可见 Tip:设置一个对象的属性的时候,利用Dispatch的put方法,给属性赋值。

上面这行语句相当于vb的 wordObject.Visible = true 语句 //Instantiate the Documents Property Dispatch documents = objWord.getProperty("Documents").toDispatch(); //documents表示word的所有文档窗口,(word是多文档应用程序) //Add a new word document, Current Active Document Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档 Tip:调用一个对象的方法的时候,利用Dispatch的call方法,上面的语句相当于vb的document = documents.Add() 语句。

Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容 Tip:取得一个对象的成员变量(属性)时利用Dispatch的get方法,上面的语句相当于vb的wordContent = document.Content语句 3. 取得word文档的内容后,可以对其内容进行操作 Dispatch.call(wordContent, "InsertAfter", "这里是一个段落的内容");//插入一个段落 4. 设置刚插入的段落的文字格式 Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs").toDispatch(); // 所有段落 int paragraphCount = Dispatch.get(paragraphs, "Count").toInt(); // 一共的段落数 // 找到刚输入的段落,设置格式 Dispatch lastParagraph = Dispatch.call(paragraphs, "Item", new Variant(paragraphCount)). toDispatch(); // 最后一段 Dispatch lastParagraphRange = Dispatch.get(lastParagraph, "Range"). toDispatch(); Dispatch font = Dispatch.get(lastParagraphRange, "Font").toDispatch(); Dispatch.put(font, "Bold", new Variant(true)); // 设置为黑体 Dispatch.put(font, "Italic", new Variant(true)); // 设置为斜体 Dispatch.put(font, "Name", new Variant("宋体")); // Dispatch.put(font, "Size", new Variant(12)); //小四 注意:如果想插入一个新的空白行,也需要设置段落的文字格式,否则新插入行的文字格式会于刚插入的段落的格式相同。

5. 将当前文档保存 Dispatch.call(document, "SaveAs", new Variant("C: abc.doc")); // 保存一个新文档 6. 释放COM线程 ComThread.Release();//释放com线程。

根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理 完整测试代码:(StudyJacob.java 附件中有本文章和java源文件) import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import com.jacob.com.ComThread; public class StudyJacob { public static void main(String[] args) { ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法 //Instantiate objWord //Declare word object ActiveXComponent objWord = new ActiveXComponent("Word.Application"); //Assign a local word object Dispatch wordObject = (Dispatch) objWord.getObject(); //Create a Dispatch Parameter to show the document that is opened Dispatch.put((Dispatch) wordObject, "Visible", new Variant(true));// new Variant(true)表示word应用程序可见 //Instantiate the Documents Property Dispatch documents = objWord.getProperty("Documents").toDispatch(); //documents表示word的所有文档窗口,(word是多文档应用程序) //Add a new word document, Current Active Document Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档 Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容 Dispatch.call(wordContent, "InsertAfter", "这里是一个段落的内容");//插入一个段落 Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs").toDispatch(); // 所有段落 int paragraphCount = Dispatch.get(paragraphs, "Count").toInt(); // 一共的段落数 // 找到刚输入的段落,设置格式 Dispatch lastParagraph = Dispatch.call(paragraphs, "Item", new Variant(paragraphCount)). toDispatch(); // 最后一段 ...

怎么使用JAVA,POI读写word文档

如何使用JAVA、POI读写word文档??能不能将一个word的内容完全读过来,放到一个新生成的word文件中去,要求能将word中的表格、图片等保留,格式不变。

最好能给个例子?网上多是很早以前的那个解决方法如下:,只能读文本内容,且新生成的word文件打开时总是要提示选择编码,不太好用,希望能有新的解决方案??!!poi操作word1.1 添加poi支持:包下载地址1.2 POI对Excel文件的读取操作比较方便,POI还提供对Word的DOC格式文件的读取。

但在它的发行版本中没有发布对Word支持的模块,需要另外下载一个POI的扩展的Jar包。

下载地址为;下载extractors-0.4_zip这个文件2、提取Doc文件内容 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; } public static void main(String[] args) { try{ String text = WordReader.readDoc("c:/test.doc"); System.out.println(text); }catch(Exception e){ e.printStackTrace(); } }3、写入Doc文档 import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class WordWriter { public static boolean writeDoc(String path, String content) { boolean w = false; try { // byte b[] = content.getBytes("ISO-8859-1"); byte b[] = content.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(b); POIFSFileSystem fs = new POIFSFileSystem(); DirectoryEntry directory = fs.getRoot(); DocumentEntry de = directory.createDocument("WordDocument", bais); FileOutputStream ostream = new FileOutputStream(path); fs.writeFilesystem(ostream); bais.close(); ostream.close(); } catch (IOException e) { e.printStackTrace(); } return w; } public static void main(String[] args) throws Exception{ String wr=WordReader.readDoc("D:\\test.doc"); boolean b = writeDoc("D:\\result.doc",wr);

Java程序把Word文档直接换成Html文件方法是什么呢?

aco是Java和Windows下的Com桥,通过它我们可以在Java程序中调用COM组件。

如果你的JDK是1.4,那你需要下载Jaco 1.9的jni库才能正常运行,早期版本在JDK 1.4下有些问题。

以下是引用片段:package com;*** 〈p〉Title:Wod文档转html类〈p〉* 〈p〉Desciption: 〈p〉* 〈p〉Copyight:() 2002〈p〉* @autho 舵手* @vesion 1.0*impot com.jaco.com.*;impot com.jaco.activeX.*;pulic class WodtoHtml {***文档转换函数*@paam docfile wod文档的绝对路径加文件名(包含扩展名)*@paam htmlfile 转换后的html文件绝对路径和文件名(不含扩展名)*pulic static void change(Sting docfile, Sting htmlfile) {ActiveXComponent app = new ActiveXComponent("Wod.Application"); 启动wodty {app.setPopety("Visile", new Vaiant(false));设置wod不可见Oject docs = app.getPopety("Documents").toDispatch();Oject doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Oject[]{ docfile, new Vaiant(false),new Vaiant(tue) }, new int[1]).toDispatch(); 打开wod文件Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Oject[] {htmlfile,new Vaiant (8) }, new int[1]); 作为html格式保存到临时文件Vaiant f = new Vaiant(false);Dispatch.call(doc, "Close", f);} catch (Exception e) {e.pintStackTace();} finally {app.invoke("Quit", new Vaiant[]{});}}pulic static void main(Sting[] sts){WodtoHtml.change("c:\\a\\运输管理调度系统总体方案.doc", "c:\\a\\t");}}

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文档主要程序如下:public String bin2hex(String bin) {char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = bin.getBytes();int bit;for (int i = 0; i > 4;sb.append("\\"");sb.append(digital[bit]);bit = bs[i] & 0x0f;sb.append(digital[bit]);}return sb.toString(); }public String readByteRtf(InputStream ins, String path){ String sourcecontent =""; try{ ins = newFileInputStream(path); byte[] b= new byte[1024];if (ins == null) {System.out.println("源模板文件不存在");}int bytesRead = 0;while (true) {bytesRead = ins.read(b, 0, 1024); // return final read bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new String(b, 0, bytesRead); // convert to stringusing bytes} }catch(Exception e){ e.printStackTrace(); } return sourcecontent ;}以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。

源代码部分详见附件。

运行源代码前提:c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf的文件。

package com;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;public class OperatorRTF {public String strToRtf(String content){char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = content.getBytes();int bit;for (int i = 0; i > 4;sb.append("\\"");sb.append(digital[bit]);bit = bs[i] & 0x0f;sb.append(digital[bit]);}return sb.toString();}public String replaceRTF(String content,String replacecontent,intflag){String rc = strToRtf(replacecontent);String target = "";if(flag==0){target = content.replace("$timetop$",rc);}if(flag==1){target = content.replace("$info$",rc);}if(flag==2){target = content.replace("$idea$",rc);}if(flag==3){target = content.replace("$advice$",rc);}if(flag==4){target = content.replace("$infosend$",rc);}return target;}public String getSavePath() {String path = "C:\\YQ";File fDirecotry = new File(path);if (!fDirecotry.exists()) {fDirecotry.mkdirs();}return path;}public String ToSBC(String input){char[] c =input.toCharArray();for (int i =0; i < c.length; i++){if (c[i] == 32){c[i] = (char) 12288;continue;}if (c[i] < 127){c[i] = (char) (c[i] + 65248);}}return newString(c);}public void rgModel(String username, String content) {// TODO Auto-generated method stubDate current=new Date();SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss");String targetname = sdf.format(current).substring(11,13) + "时";targetname += sdf.format(current).substring(14,16) + "分";targetname += sdf.format(current).substring(17,19) + "秒";targetname += "_" + username +"_记录.rtf";String strpath = getSavePath();String sourname = strpath+"\\"+"模板.rtf";String sourcecontent = "";InputStream ins = null;try{ins = new FileInputStream(sourname);byte[] b = new byte[1024];if (ins == null) {System.out.println("源模板文件不存在");}int bytesRead = 0;while (true) {bytesRead = ins.read(b, 0, 1024); // return final read bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new Strin...

java中的时间操作有哪些呢?

一、获取当前时间 有两种方式可以获得,第一种,使用date类。

j2se的包里有两个date类,一个是java.sql.date,一个是java.util.date 这里,要使用java.util.date。

获取当前时间的代码如下 date date = new date(); date.gettime(); 还有一种方式,使用system.cuenttimemillis(); 这两种方式获得的结果是一样的,都是得到一个当前的时间的long型的时间的毫秒值,这个值实际上是当前时间值与1970年一月一号零时零分零秒相差的毫秒数。

当前的时间得到了,但实际的应用中最后往往不是要用这个long型的东西,用户希望得到的往往是一个时间的字符串,比如“2006年6月18号”,或“2006-06-18”,老外可能希望得到的是“06-18-2006”,诸如此类等等。

这就是下一个要解决的问题 二、获取某个时间的某种格式 获取时间的格式,需要用到一个专门用于时间格式的类java.text.simpledatefomat。

首先,定义一个simpledatefomat变量 simpledatefomat sdf = new simpledatefomat("",locale.simplified_chinese); 这个构造函数的定义如下: simpledatefomat(sting patten, locale locale) 第一个参数patten,我们后面再解释,这里我们使用一个"",第二个参数,是用来设置时区的,这里用到了java.util.locale这个类,这个类了面定义了很多静态变量,直接拿过来用就ok,我们把时区设置为locale.simplified_chinese,只看名字,这个静态变量的意义已经很清楚了。

接下来我们使用这个simpledatefomat把当前时间格式化为一个如下格式的时间字符串“xxxx年xx月xx日_xx时xx分xx秒”,代码: sdf.applypatten("yyyy年mm月dd日_hh时mm分ss秒"); sting timest = sdf.fomat(new date()); 获取时间格式的函数是fomat,这个函数的参数是java.util.date对象,这个没有什么花头。

要说明一下的是这个patten,所谓的模式。

这里,yyyy,mm,dd等,这就是模式。

我们可以在simpledatefomat的构造函数中指定模式,比如 simpledatefomat sdf = new simpledatefomat("yyyy-mm-dd",locale.simplified_chinese); 也可以获取时间格式的时候使用applypatten函数临时指定,上面的例子就是这样。

什么字符代表什么,这是j2se约定好的,设置模式的时候,我们可以使用约定好的字符加上任何我们想要的字符串。

j2se对字符所代表的模式的约定列表如下: lettedate o time componentpesentation gea designato text yyea yea m month in yea month w week in yea nume w week in month nume d day in yeanume d day in month nume f day of week in month nume e day in week texta ampm make text h hou in day (0-23)nume k hou in day (1-24)nume k hou in ampm (0-11) nume h hou in ampm (1-12) nume m minute in hou nume s second in minute nume s millisecond nume z time zone geneal time zone z time zone fc 822 time zone

大家还关注
阅读排行
推荐阅读