JAVA读取WORD文档解决方案

合集下载

JAVA读取WORD文档解决方案

JAVA读取WORD文档解决方案

JAVA读取WORD文档解决方案在Java中读取Word文档需要使用特定的Java库或API来解析和处理Word文档格式(.doc或.docx)。

在下面的解决方案中,我们将介绍两种流行的Java库,即Apache POI和JavaFX的XSSF。

1. Apache POI:Apache POI是一个流行的开源Java库,用于处理Microsoft Office 格式的文件,包括Word文档。

下面是使用Apache POI库读取Word文档的步骤:1.1 添加Apache POI依赖库到项目中。

在Maven项目中,可以在pom.xml文件中添加以下依赖项:```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>```1.2 使用`XWPFDocument`类打开Word文档。

下面是一个示例代码:```javaFileInputStream fis = newFileInputStream("path/to/word/document.docx");XWPFDocument document = new XWPFDocument(fis);fis.close(;```1.3 使用`XWPFParagraph`类和`XWPFRun`类来遍历Word文档中的段落和文本。

Java 读取Word中的文本的图片

Java 读取Word中的文本的图片

Java 提取Word中的文本和图片本文将介绍通过Java来提取或读取Word文档中文本和图片的方法。

这里提取文本和图片包括同时提取文档正文当中以及页眉、页脚中的的文本和图片。

使用工具:Spire.Doc for JavaJar文件导入方法(参考):方法1:下载jar文件包。

下载后解压文件,并将lib文件夹下的Spire.Doc.jar文件导入到java程序。

导入效果参考如下:方法2:可通过maven导入。

参考导入方法。

测试文档如下:Java 代码示例(供参考)【示例1】提取Word 中的文本 import com.spire.doc.*; import java.io.FileWriter;import java.io.IOException;public class ExtractText {public static void main(String[] args) throws IOException{//加载测试文档Document doc = new Document();doc.loadFromFile("test.docx");//获取文本保存为StringString text = doc.getText();//将String写入TxtwriteStringToTxt(text,"提取文本.txt");}public static void writeStringToTxt(String content, String txtFileName) throws IOException {FileWriter fWriter= new FileWriter(txtFileName,true);try {fWriter.write(content);}catch(IOException ex){ex.printStackTrace();}finally{try{fWriter.flush();fWriter.close();} catch (IOException ex) {ex.printStackTrace();}}}}文本提取结果:【示例2】提取Word中的图片import com.spire.doc.Document;import com.spire.doc.documents.DocumentObjectType;import com.spire.doc.fields.DocPicture;import com.spire.doc.interfaces.ICompositeObject;import com.spire.doc.interfaces.IDocumentObject;import javax.imageio.ImageIO;import java.awt.image.RenderedImage;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;public class ExtractImg {public static void main(String[] args) throws IOException { //加载Word文档Document document = new Document();document.loadFromFile("test.docx");//创建Queue对象Queue nodes = new LinkedList();nodes.add(document);//创建List对象List images = new ArrayList();//遍历文档中的子对象while (nodes.size() > 0) {ICompositeObject node = (ICompositeObject) nodes.poll();for (int i = 0; i < node.getChildObjects().getCount(); i++) {IDocumentObject child = node.getChildObjects().get(i);if (child instanceof ICompositeObject) {nodes.add((ICompositeObject) child);//获取图片并添加到Listif (child.getDocumentObjectType() == DocumentObjectType.Picture) { DocPicture picture = (DocPicture) child;images.add(picture.getImage());}}}}//将图片保存为PNG格式文件for (int i = 0; i < images.size(); i++) {File file = new File(String.format("图片-%d.png", i));ImageIO.write((RenderedImage) images.get(i), "PNG", file);}}}图片提取结果:(本文完)。

Java读取Word模板替换内容并另存

Java读取Word模板替换内容并另存

Java读取Word模板替换内容并另存⽤到的⼯具:,⽂件解压后主要有三个⽂件:jacob.jar、jacob-1.17-M2-x64.dll和jacob-1.17-M2-x86.dll。

jacob.jar引⼊到项⽬⼯程中,jacob-1.17-M2-x64.dll放在C:\Windows\System32下,如果系统是32位的则把jacob-1.17-M2-x86.dll放在C:\Windows\System32下。

注意:⽂件名要⽤.doc,万不能⽤.docx。

那样会打不开⽂件代码⽰例:/** Java2word.java** Created on 2007年8⽉13⽇, 上午10:32** To change this template, choose Tools | Template Manager* and open the template in the editor.*//** 传⼊数据为HashMap对象,对象中的Key代表word模板中要替换的字段,Value代表⽤来替换的值。

* word模板中所有要替换的字段(即HashMap中的Key)以特殊字符开头和结尾,如:$code$、$date$……,以免执⾏错误的替换。

* 所有要替换为图⽚的字段,Key中需包含image或者Value为图⽚的全路径(⽬前只判断⽂件后缀名为:.bmp、.jpg、.gif)。

* 要替换表格中的数据时,HashMap中的Key格式为“table$R@N”,其中:R代表从表格的第R⾏开始替换,N代表word模板中的第N张表格;Value为ArrayList对象,ArrayList中包含的对象统⼀为String[],⼀条String[]代表⼀⾏数据,ArrayList中第⼀条记录为特殊记录,记录的是表格中要替换的列号,如:要替换第⼀列、第三列、第五列的数据,则第⼀条记录为String[3] {“1”,”3”,”5”}。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案。。。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案。。。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现⽅案。

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现⽅案及开发中的点滴分享 在此,先分享下写此⽂前的经历与感受,我所有的感觉浓缩到⼀个字,那就是:"坑",如果是两个字那就是"巨坑"=>因为这个需求⼀开始并不是这样⼦的,且听我漫漫道来: ⼀开始客户与我们商量的是将office和PDF上传,将此类⽂件解析成html格式,在APP端调⽤内置server直接以html"播放" 经历⼀个⽉~,两个⽉~,三个⽉~~~ 到需求开发阶段,发现这是个坑。

:按照需规的意思这个整体是当做⼀个功能来做的,技术难度也就算了,⽽且按照估算的⼯时也很难做成需规所需要的样⼦(缺陷太多!) 然后⼀周~,⼀周~,⼜⼀周~~~ 各种⽅案下来将需求做成能⽤的样⼦,然后需求确认时客户说:“我们没有要求你们能解析这些⽂档,我们只要求你们当做⼀个源⽂件上传,在APP端点击直接能选择调⽤第三⽅应⽤打开就⾏了,⽽且⼀开始我们的需求就是这样的。

” /**听完,顿时泪流满⾯( _ ),如果业务⼀开始就确认这样做,何⾄于浪费如此多的时间,花费如此多的精⼒绕⽼⼤⼀圈。

*/ 需求绕了⼀圈⼜绕回来了,作为经历过的⼈,现在总结下这需求⾥⾯⽆尽的坑: A>开源社区有很多Demo,这些Demo有很多缺陷,⽐如office⾥⾯的艺术字、图⽚、公式、颜⾊样式、视频和⾳频不能解析 B>能解析的对象,解析出来的效果不是很好,⽐如word和ppt⾃⾝的排版乱了,excel单元格⾥⾯的⾃定义格式全变成数字了~等等 C>开源社区的资料并不是很全,导致的结果是不同的⽂档类型需要⽤不同的解析⽅式去解析,⽐如word⽤docx4j解析、excel⽤poi解析带来的代码量巨⼤ D>由于代码⾃⾝的解析效果不是很好,更改后的⽅案需要在上传之前将源⽂件处理成其他的形式,如pdf需要切成图⽚,ppt需要转换成视频或是图⽚,这样⼀来需求实现的⽅式就变成半⾃动了╥﹏╥... E>word⽤docx4j解析⼀个很⼤的问题是解析的效率太低了,5MB以上的⽂件或者内容⽐较复杂的word⽂档解析⼗分耗时,解析效率太低,再⼀就是poi解析数据量⽐较⼤的Exel(⽐如>1000⾏)容易造成内存溢出,不好控制 F>⼯时太短,只有15天。

Java解析word文档

Java解析word文档
for(int j=1;j<imgCount+1;j++){ Dispatch shape = Dispatch.call(imgDispatch, "Item", new Variant(1)).toDispatch(); Dispatch imageRange = Dispatch.get(shape, "Range").toDispatch(); Dispatch.call(imageRange, "Copy"); (imageRange, "Paste"); } }
Java解 析 word文 档 背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档。 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率都较高。 疑难点 word解析可以预见的困难主要有以下几个方面: word 结构问题 —— word不开源,且含有很多非文本内容,比如图表,而已知的常规方法只能解析纯文本内容,所以如果不知道word内部 层级结构,解析将难以进行。 word 公式问题 —— word公式来源并非单一,可能是用MathType插件生成的latex公式,也可能是用word自带公式编辑器生成的公式,还有 可能公式部分手敲,部分使用搜狗输入法或者其它编辑器输入。不同来源处理方式是否一样?且能否有效读取文档各种上下脚标?方便后 期展示? word 非文本问题 —— word含有很多的非文本内容,比如图表。来源也多样,图表可能是用word自带的画图工具生成的,也有可能是复制 粘贴的,不同来源解析方式是否一样?且读取的时候是否能有效获取图片的位置及大小信息?方便文档内容后期在PC端和移动端展示。无 论最终方案是什么,肯定是将所有的且需要的非文本信息转换为文本信息。 word 版本问题 —— word有03、07等好几个版本,还有WPS版本,解析是否要全部兼容?后缀名有docx和doc,是否全部兼容?当然,前 提是已经成功解析一种类型。 word 规范问题 —— 有些word可能是早期制作的,返工代价太大,所以格式内容多样化。而且就算制定word格式规范,新制作的word也无 法保证格式一定正确,除非是程序自动生成的文档。举个例子,试题的题序,肉眼无法区分的格式就有好几种。程序只可能尽量覆盖绝大 部分情况,考虑的情况越多,解析正确率越高,当然程序也更复杂。

几种解析Word文档的Java类库比较

几种解析Word文档的Java类库比较
受云服务的启发我想到未必非要在java中解决问题于是想到之前写过一个nodejs的项目其中涉及到office文档的生成可以利用nodejs开发一个restful的接口将所有模板放在这个项目里调用接口实现模板生成
几种解析 Word文档的 Java类库比较
推荐指数:
因为之前做过EXCEL的解析,所以我首选就是POI,然而经过调查之后发现POI解析Word文档就是个坑,非常难用不说,有些功能还不支 持。试验一番之后不得不放弃了。
推荐指数:
受云服务的启发,我想到未必非要在Java中解决问题,于是想到之前写过一个Node.js的项目,其中涉及到office文档的生成,可以利用 Node.js开发一个Restful的接口,将所有模板放在这个项目里,调用接口实现模板生成。Docxtemplater相对来讲是一个很好的Node.js office 中间件。
推荐指数:
发现POI不好用之后同事推荐给我了一种基于POI的模板类库,可以根据模板自动生成文档。语法简单,而且模板可以定制。因为这次的需 求比较特殊,所以有些地方不太满足项目的需要。如果你的项目是那种从头搭建的项目的话,建议使用这个类库。
推荐指数:
FreeMarker是一种Html模板引擎工具,因为word文档也是一种固定格式的XML文档,所以可以使用FreeMarker来设定模板,并根据模板生 成。缺点是所有doc模板都必须修改为符合标准的ftl模板文档,工程量较大。
推荐指数:
JACOB是一个Java-COM的中间件,通过这个组件你可以在Java应用程序中调用COM组件和Win32程序库。然而缺点也比较明显,就是只 能在Windows环境下使用,如果是那种需要部署到Linux环境的项目就不适用了。我没有写测试小程序,不知道具体使用起来会是怎么样。

Java 读取Word文本框中的文本、图片、表格

Java 读取Word文本框中的文本、图片、表格

Java 读取Word文本框中的文本/图片/表格Word可插入文本框,文本框中可嵌入文本、图片、表格等内容。

对文档中的已有文本框,也可以读取其中的内容。

本文以Java程序代码来展示如何读取文本框,包括读取文本框中的文本、图片以及表格等。

【程序环境】程序编辑环境为IntelliJ IDEA,并在程序中引入了free Spire.Doc.jar 3.9.0,安装的Jdk版本为1.8.0。

【源文档】程序中用于测试的Word源文档如下图:【程序代码】1.读取文本框中的文本import com.spire.doc.*;import com.spire.doc.documents.Paragraph;import com.spire.doc.fields.TextBox;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class ExtractText {public static void main(String[] args) throws IOException {//加载含有文本框的Word文档Document doc = new Document();doc.loadFromFile("sample.docx");//获取文本框TextBox textbox = doc.getTextBoxes().get(0);//保存文本框中的文本到指定文件File file = new File("ExtractedText.txt");if (file.exists()){file.delete();}file.createNewFile();FileWriter fw = new FileWriter(file, true);BufferedWriter bw = new BufferedWriter(fw);//遍历文本框中的对象for (Object object:textbox.getBody().getChildObjects()) {//判定是否为文本段落if(object instanceof Paragraph){//获取段落中的文本String text = ((Paragraph) object).getText();//写入文本到txt文档bw.write(text);}}bw.flush();bw.close();fw.close();}}2.读取文本框中的图片import com.spire.doc.*;import com.spire.doc.documents.Paragraph;import com.spire.doc.fields.DocPicture;import com.spire.doc.fields.TextBox;import javax.imageio.ImageIO;import java.awt.image.RenderedImage;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class ExtractImg {public static void main(String[] args) throws IOException {//加载含有文本框的Word文档Document doc = new Document();doc.loadFromFile("sample.docx");//获取文本框TextBox textbox = doc.getTextBoxes().get(0);//创建List对象List images = new ArrayList();//遍历文本框中所有段落for (int i = 0 ; i < textbox.getBody().getParagraphs().getCount();i++) {Paragraph paragraph = textbox.getBody().getParagraphs().get(i);//遍历段落中的所有子对象for (int j = 0; j < paragraph.getChildObjects().getCount(); j++) {Object object = paragraph.getChildObjects().get(j);//判定对象是否为图片if (object instanceof DocPicture){//获取图片DocPicture picture = (DocPicture) object;images.add(picture.getImage());}}}//将图片以PNG文件格式保存for (int z = 0; z < images.size(); z++) {File file = new File(String.format("图片-%d.png", z));ImageIO.write((RenderedImage) images.get(z), "PNG", file); }}}3.读取文本框中的表格import com.spire.doc.*;import com.spire.doc.documents.Paragraph;import com.spire.doc.fields.TextBox;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class ExtractTable {public static void main(String[]args) throws IOException { //加载Word测试文档Document doc = new Document();doc.loadFromFile("sample.docx");//获取文本框TextBox textbox = doc.getTextBoxes().get(0);//获取文本框中的表格Table table = textbox.getBody().getTables().get(0);//保存到文本文件File file = new File("ExtractedTable.txt");if (file.exists()){file.delete();}file.createNewFile();FileWriter fw = new FileWriter(file, true);BufferedWriter bw = new BufferedWriter(fw);//遍历表格中的段落并提取文本for (int i = 0; i < table.getRows().getCount(); i++){TableRow row = table.getRows().get(i);for (int j = 0; j < row.getCells().getCount(); j++){TableCell cell = row.getCells().get(j);for (int k = 0; k < cell.getParagraphs().getCount(); k++) {Paragraph paragraph = cell.getParagraphs().get(k);bw.write(paragraph.getText() + "\t");}}bw.write("\r\n");}bw.flush();bw.close();fw.close();}}。

Java实现word文档在线预览,读取office(word,excel,ppt)文件

Java实现word文档在线预览,读取office(word,excel,ppt)文件

Java实现word⽂档在线预览,读取office(word,excel,ppt)⽂件想要实现word或者其他office⽂件的在线预览,⼤部分都是⽤的两种⽅式,⼀种是使⽤openoffice转换之后再通过其他插件预览,还有⼀种⽅式就是通过POI读取内容然后预览。

⼀、使⽤openoffice⽅式实现word预览主要思路是:1.通过第三⽅⼯具openoffice,将word、excel、ppt、txt等⽂件转换为pdf⽂件2.通过swfTools将pdf⽂件转换成swf格式的⽂件3.通过FlexPaper⽂档组件在页⾯上进⾏展⽰我使⽤的⼯具版本:openof:3.4.1swfTools:1007FlexPaper:这个关系不⼤,我随便下的⼀个。

推荐使⽤1.5.1JODConverter:需要jar包,如果是maven管理直接引⽤就可以操作步骤:1.office准备下载openoffice:从过往⽂件,其他语⾔中找到中⽂版3.4.1的版本下载后,解压缩,安装然后找到安装⽬录下的program ⽂件夹在⽬录下运⾏soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard如果运⾏失败,可能会有提⽰,那就加上 .\ 在运⾏试⼀下这样openoffice的服务就开启了。

2.将flexpaper⽂件中的js⽂件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js⽂件主要是预览swf⽂件的插件)拷贝⾄⽹站根⽬录;将FlexPaperViewer.swf拷贝⾄⽹站根⽬录下(该⽂件主要是⽤在⽹页中播放swf⽂件的播放器)项⽬结构:页⾯代码:fileUpload.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>⽂档在线预览系统</title><style>body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;}a {color:#CE4614;}#msg-box {color: #CE4614; font-size:0.9em;text-align:center;}#msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;}#msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;}#msg-box .nav {margin-top:20px;}</style></head><body><div id="msg-box"><form name="form1" method="post" enctype="multipart/form-data" action="docUploadConvertAction.jsp"><div class="title">请上传要处理的⽂件,过程可能需要⼏分钟,请稍候⽚刻。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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程序部分,就会明白。

相关文档
最新文档