-
2019-10-16 10:33:26
public static String getDocx(String uri){ //解析docx模板并获取document对象 XWPFDocument document; //获取XWPFRun对象输出整个文本内容 StringBuffer tempText = new StringBuffer(); try { document = new XWPFDocument(POIXMLDocument.openPackage(uri)); //获取整个文本对象 List<XWPFParagraph> allParagraph = document.getParagraphs(); for (XWPFParagraph xwpfParagraph : allParagraph) { List<XWPFRun> runList = xwpfParagraph.getRuns(); for (XWPFRun xwpfRun : runList) { tempText.append(xwpfRun.toString()); } } Document doc = Jsoup.parse(tempText.toString()); if (doc == null) { return null; } // 获取 Elements matchElements = doc.select("evaluation"); Iterator<Element> i = matchElements.iterator(); //测评标题 String title = ""; //测评题目 List<String> question_arry=new ArrayList<String>(); //问题对应的选项 List<String> optionContent_arry=new ArrayList<String>(); //选项对应的权值 List<String> option_scoreArry=new ArrayList<String>(); while (i.hasNext()) { Element el = i.next(); title = el.select("title").text(); Elements tm = doc.select("tm"); Iterator<Element> j = tm.iterator(); while (j.hasNext()) { Element el_tm = j.next(); question_arry.add(el_tm.select("tm1").text()); //获取选项 Elements tm_xx = el_tm.select("option"); Iterator<Element> k = tm_xx.iterator(); String option = ""; String score = ""; while (k.hasNext()) { Element el_xx = k.next(); option = option+el_xx.text()+"#"; score = score+el_xx.attr("score")+"#"; } optionContent_arry.add(option.substring(0, option.length()-1)); option_scoreArry.add(score.substring(0, score.length()-1)); } } System.out.println("测评标题:"+title); System.out.println("测评标题:"+question_arry); System.out.println("测评选项:"+optionContent_arry); System.out.println("选项权值:"+option_scoreArry); /* //存放文档新地址 String newPath=""; //读取源文档内容到新文档 File file = new File(newPath); if(!file.getParentFile().exists()){ file.getParentFile().mkdir(); file.getParentFile().createNewFile(); } FileOutputStream stream = new FileOutputStream(newPath); document.write(stream);//写入新文档 stream.close();*/ } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //文档内容 return tempText.toString(); }
下面附上我本地的word文件内容
<evaluation> <title class="one">关于个人喜好的测试</title> <tm> <tm1>你多少岁啦</tm1> <option score="15">10</option> <option score="25">12</option> <option score="35">14</option> <option score="45">16</option> </tm> <tm> <tm1>你喜欢什么颜色</tm1> <option score="15">红色</option> <option score="25">黑色</option> <option score="35">蓝色</option> <option score="45">白色</option> </tm> </evaluation>
更多相关内容 -
java读取word文档内容以及字体大小和颜色
2018-11-05 16:32:57java读取不同版本文档的内容以及字体大小,实现对文档格式进行匹配! -
Java读取word文档内容并输出成网页(含图片,公式)
2017-10-10 16:57:19本代码实现使用Java程序读取word文档成网页,将word文档按原样在网页输出。项目编码为UTF-8,文件编码也是utf8,再不要说乱码这种骚话了,选择utf8加载项目就不会乱码 -
Java读取Word表格内容
2018-06-09 22:07:28通过Java读取word表格中的内容,将内容存到数据库中,将Word中的图片存到硬盘中 -
java实现读取word文件并且上传到数据库
2018-08-09 16:22:48用java语言实现对word表格操作,实现自动批量往数据库中插入数据,节省插入数据时间。 -
java 读取word文档的内容
2020-09-01 15:13:55</dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.0.0</version> </dependency> 第一种java后台接收的是文件路径 public String readWord(String...首先在pom中添加依赖
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.0.0</version> </dependency>
第一种java后台接收的是文件路径
public String readWord(String path){ String buffer = ""; try { if (path.endsWith(".doc")){ InputStream is = new FileInputStream(new File(path)); WordExtractor ex = new WordExtractor(is); buffer = ex.getText(); }else if (path.endsWith(".docx")){ /* 如果poi版本在4.0.0及以上那么可以使用注释的方式 OPCPackage opcPackage = POIXMLDocument.openPackage(path); POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage); buffer = extractor.getText();*/ FileInputStream fs = new FileInputStream(new File(path)); XWPFDocument xdoc = new XWPFDocument(fs); XWPFWordExtractor extractor = new XWPFWordExtractor(xdoc); buffer = extractor.getText(); } }catch (Exception e){ e.printStackTrace(); } return buffer; }
第二种java后台接收的是文件流
//使用MultipartFile 接收文件流 public void importWord(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); String fileName = file.getOriginalFilename(); String suff = fileName.substring(fileName.lastIndexOf(".") + 1); String content = ""; if (suff.equals("docx")) { XWPFDocument xdoc = new XWPFDocument(inputStream); XWPFWordExtractor extractor = new XWPFWordExtractor(xdoc); content = extractor.getText(); System.out.println(content); extractor.close(); } else if (suff.equals("doc")) { WordExtractor ex = new WordExtractor(inputStream); content = ex.getText(); System.out.println(content); ex.close(); } else { System.out.println("此文件不是word文件"); } }
-
关于java读取word文件内容
2017-12-05 12:21:18如图所示,假如我要读取word文件内容,业务概述存一行条数据,业务类型存一条数据,办理时限存一条数据,以此类推。那我读取word文件的时候改如何区分他们分别存入呢,不要问我为什么,因为有上万个这样的文档,手动... -
Java读取word文档解决方案
2021-03-03 12:49:33java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,...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文档
主要程序如下:
/**
* 将制定的字符串转换为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 < bs.length;i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append("\\'");
sb.append(digital[bit]);
bit = bs[i] & 0x0f;
sb.append(digital[bit]);
}
return sb.toString();
}
/**
* 字节形式读取rtf模板内容
*/
public String readByteRtf(InputStream ins, String path){
String sourcecontent = "";
try{
ins = new FileInputStream(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 bytes counts
if(bytesRead == -1) {// end of InputStream
System.out.println("读取模板文件结束");
break;
}
sourcecontent += new String(b, 0, bytesRead); // convert to string using bytes
}
}catch(Exception e){
e.printStackTrace();
}
}
以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。运行源代码前提:
c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf 的文件。。。。。文件名是在程序中指定的呵呵。由于是由商业软件中拆分出的demo所以只是将自己原来的写的程序分离,合并在一个java文件中,所以有的方法在示例程序中看似多余,没有必要那么麻烦。
对于替换部分需要循环的特例程序,我不好拆分,里面很容易暴露商业软件的东西,所以就不贴了,有需要的话可以加我QQ或者MSN,一起讨论呵呵。附件传了半天也没有传上去,没有办法只有这样搞了呵呵。模板文件附件无法存放,需要的直接联系呵呵。其实直接看以下的java程序部分,就会明白
/**
* 以下部分是java源代码
*/
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 {
/**
* 字符串转换为rtf编码
* @param content
* @return
*/
public String strToRtf(String content){
char[] digital = "0123456789ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = content.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append("\\'");
sb.append(digital[bit]);
bit = bs[i] & 0x0f;
sb.append(digital[bit]);
}
return sb.toString();
}
/**
* 替换文档的可变部分
* @param content
* @param replacecontent
* @param flag
* @return
*/
public String replaceRTF(String content,String replacecontent,int flag){
String rc = strToRtf(replacecontent);
String target = "";
/*if(flag==0){
target = content.replace("$time$",rc);
}*/
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;
}
/**
* 获取文件路径
* @param flag
* @return
*/
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 new String(c);
}
public void rgModel(String username, String content) {
// TODO Auto-generated method stub
/* 构建生成文件名 targetname:12时10分23秒_username_记录.rtf */
Date current=new Date();
SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd HH: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 bytes counts
if(bytesRead == -1) {// end of InputStream
System.out.println("读取模板文件结束");
break;
}
sourcecontent += new String(b, 0, bytesRead); // convert to string using bytes
}
}catch(Exception e){
e.printStackTrace();
}
/* 修改变化部分 */
String targetcontent = "";
/**
* 拆分之后的数组元素与模板中的标识符对应关系
* array[0]:timetop
* array[1]:info
* array[2]:idea
* array[3]:advice
* array[4]:infosend
*/
String array[] = content.split("~");
/**
* 2008年11月27日:更新模板之后时间无需自动填充
*/
/*String nowtime = sdf.format(current).substring(0,4) + "年";
nowtime += sdf.format(current).substring(5,7) + "月";
nowtime += sdf.format(current).substring(8,10) + "日";*/
for(int i=0;i
/*if(i==0){
targetcontent = documentDoc.replaceRTF(sourcecontent,nowtime,i);
}else{
targetcontent = documentDoc.replaceRTF(targetcontent,array[i-1],i);
}*/
if(i==0){
targetcontent = replaceRTF(sourcecontent, array[i], i);
}else{
targetcontent = replaceRTF(targetcontent, array[i], i);
}
}
/* 结果输出保存到文件 */
try {
FileWriter fw = new FileWriter(getSavePath()+"\\" + targetname,true);
PrintWriter out = new PrintWriter(fw);
if(targetcontent.equals("")||targetcontent==""){
out.println(sourcecontent);
}else{
out.println(targetcontent);
}
out.close();
fw.close();
System.out.println(getSavePath()+" 该目录下生成文件" + targetname + " 成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
OperatorRTF oRTF = new OperatorRTF();
/**
* 被替换内容以"~"符号分割,处理的时候将其拆分为数组即可
*/
String content = "2008年10月12日9时-2008年10月12日6时~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法";
oRTF.rgModel("cheney",content);
}
}
-
Java读取Word文档页数
2017-10-19 10:19:59里面包含一个word转pdf的jar,和一个读取pdf的jar。可以实现Java读取Word文档的页数。 -
Java 读取Word文档中的文本内容
2019-04-25 16:53:26这篇文章将介绍如何使用Free Spire.Doc for Java组件在Java应用程序中读取Word文档的文本内容。Free Spire.Doc for Java提供了两种方法来读取Word文档中的内容,一种是直接获取文档中的所有文本内容,另一种是遍历...这篇文章将介绍如何使用Free Spire.Doc for Java组件在Java应用程序中读取Word文档的文本内容。Free Spire.Doc for Java提供了两种方法来读取Word文档中的内容,一种是直接获取文档中的所有文本内容,另一种是遍历文档的每个段落,然后获取段落中的文本,下面将逐一介绍这两种方法。
Word文档如下:
导入jar文件
在开始前,我们需要导入jar文件。下载Free Spire.Doc for Java并解压缩,然后从lib文件夹下,导入Spire.Doc.jar包到你的Java应用程序中。
(对于maven工程,可以在pom.xml文件中添加对Free Spire.Doc for Java的依赖,参考这篇文章:如何通过Maven仓库安装Spire Java系列组件)
示例代码
方法一 直接获取所有文本
Document类的getText()方法,支持直接获取整个Word文档的所有文本,两行代码就能搞定。
import com.spire.doc.*; import java.io.IOException; public class TextReader { public static void main(String[] args) throws IOException { //加载Word文档 Document doc = new Document("Input.docx"); //获取文本 System.out.println(doc.getText()); } }
方法二 遍历段落获取文本
这种方式方法比方法一更加灵活,除了可以获取指定段落的文本外,还可以获取段落的其他属性比如字体、字体大小、对齐方式等。
import com.spire.doc.*; import com.spire.doc.documents.Paragraph; import java.io.IOException; public class ParagraphReader { public static void main(String[] args) throws IOException { //加载Word文档 Document doc = new Document("Input.docx"); //遍历文档中的节和段落,获取每个段落的文本 for(int i = 0; i < doc.getSections().getCount(); i++) { Section section = doc.getSections().get(i); for (int j = 0; j < section.getParagraphs().getCount(); j++) { Paragraph paragraph = section.getParagraphs().get(j); System.out.println(paragraph.getText()); } } } }
读取结果(内容太长,没有截全):
-
java实现读取word文件文字内容信息
2021-05-24 15:27:52最近项目用到了java读取word文件文字内容信息,整理了以下一个工具类,可以直接调用 需要引入jar包 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <... -
Java读取多Word文档中指定位置的表格数据或文本内容
2018-12-11 16:32:12Java读取Word文档中指定位置(可以自己自定义位置)的表格数据或文本内容 * @param filePath 文档路径 * @param start 指定位置开始读取表格数据的该位置上的字符串 * @param end 指定位置开始结束读取表格数据的该... -
java中读取word文档里的内容
2021-02-28 17:08:30package com.cn.peitest.excel.word;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;import java.util.Iterator;import java.util.List;i... -
java poi读取word内容
2022-04-14 19:13:381.读取word所有内容(非表格) public static String readDoc(String path) { String resullt = ""; //首先判断文件中的是doc/docx try { if (path.endsWith(".doc")) { InputStream is = new ... -
用Java读取Word文档
2016-04-12 16:56:38用Java读取Word文档 -
java读取word文档里面的内容(包括doc和docx格式)
2019-11-30 20:19:47java读取word文档里面的内容(包括doc和docx格式) java读取word文档里面的内容(包括doc和docx格式),使用POI架包 使用的POI架包如下 poi-3.16.jar poi-examples-3.16.jar poi-excelant-3.16.jar poi-ooxml-3.16.jar ... -
java读取Word文档依赖jar包
2018-01-02 20:56:59java利用poi读取word文档内容所依赖的jar包。poi可以读取doc、docx格式文档。 -
Java读取Word中的表格(Excel),并导出文件为Excel
2019-11-12 16:28:56Java读取Word中的表格(Excel),并导出文件为Excel -
JAVA读取word文档
2021-07-09 09:22:101.doc类 InputStream is = null; WordExtractor ex = null; try{ is = file.getInputStream(); ex = new WordExtractor(is); return ex.getText(); } 2.docx类 InputStream is = null;... is = file -
Java 读取Word文档属性
2021-02-12 18:58:42public class ReadDocumentProperty {public static void main(String[]args){//加载文档Document doc = new Document("SetProperty.docx");//读取内置文档属性System.out.println("标题: " + doc.getBuilt... -
Java实现poi方式读取word文件内容(带格式)
2021-01-31 11:47:16加载文档 页眉页脚 页面边距 获取标题 获取表格 获取图片 缩进方式计算 段落格式 文字属性 效果 所有源码获取方式 扫描下方二维码关注公众号获取即可 pom依赖 <!-- ... -
java自动根据文件内容的编码来读取避免乱码
2020-09-04 15:30:17主要介绍了java自动根据文件内容的编码来读取避免乱码,需要的朋友可以参考下 -
JAVA读写word
2019-02-27 15:41:54java对word的读写操作,解压后把jar放入项目组,就可以使用 -
JAVA-POI读取word每一段所在页码(附依赖jar包).zip
2021-08-16 11:17:12我给出了代码和所有的解释,用POI读取word中的页码。也算是小方法了,基本很准确,为什么要加一个基本呢?因为,分页标志符号在第一行为空白行的时候没有分页符!!所以你的文档如果有很多首段空白行的话,不要浪费C... -
Java word 内容读取
2018-09-20 20:33:47* 读取doc文件内容 * * @param file * 想要读取的文件对象 * @return 返回文件内容 * @throws IOException */ public static String doc2String(FileInputStream fs) throws IOException { ... -
java读取word文件页数方法汇总
2021-02-25 11:40:42@java读取word文件页数 最近在做一个word转html的小功能,需要用到事先获得word文件的页数来判断是否要进行转换。我从网上搜了下,发现大多数文章都写的是错误的,这里来汇总下,正确的文章我会直接放链接,毕竟那是... -
java读取word并搜索内容
2020-06-25 14:11:16支持word package com.data.util; import org.apache.poi.POIXMLDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.... -
java 实现poi方式读取word文件内容
2020-01-02 10:02:14java 实现poi方式读取word文件内容 1、下载poi的jar包 下载地址:https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz 下载解压后用到的jar包,这些包都能在下载的... -
java准确读取word页码
2017-10-04 01:39:53java准确读取word页码,正确率100%,请结合本文查看http://blog.csdn.net/tiandixuanwuliang/article/details/71298406 -
实例讲解Java读取一般文本文件和word文档的方法
2021-02-12 11:05:05读取一般文本文件很好办,调用Java自带的io包里的类即可,富文本的doc文件我们可以用Apache的poi项目中的WordExtractor,这里我们一起来以实例讲解Java读取一般文本文件和word文档的方法一般文本文件我们以日志文件.log...