POI读取word转换html
java使用POI操作XWPFDocument生成Word实战(一)
java使⽤POI操作XWPFDocument⽣成Word实战(⼀)注:我使⽤的word 2016功能简介:(1)使⽤jsoup解析html得到我⽤来⽣成word的⽂本(这个你们可以忽略)(2)⽣成word、设置页边距、设置页脚(页码),设置页码(⽂本)⼀、解析htmlDocument doc = Jsoup.parseBodyFragment(contents);Element body = doc.body();Elements es = body.getAllElements();⼆、循环Elements获取我需要的html标签boolean tag = false;for (Element e : es) {//跳过第⼀个(默认会把整个对象当做第⼀个)if(!tag) {tag = true;continue;}//创建段落:⽣成word(核⼼)createXWPFParagraph(docxDocument,e);}三、⽣成段落/*** 构建段落* @param docxDocument* @param e*/public static void createXWPFParagraph(XWPFDocument docxDocument, Element e){XWPFParagraph paragraph = docxDocument.createParagraph();XWPFRun run = paragraph.createRun();run.setText(e.text());run.setTextPosition(35);//设置⾏间距if(e.tagName().equals("titlename")){paragraph.setAlignment(ParagraphAlignment.CENTER);//对齐⽅式run.setBold(true);//加粗run.setColor("000000");//设置颜⾊--⼗六进制run.setFontFamily("宋体");//字体run.setFontSize(24);//字体⼤⼩}else if(e.tagName().equals("h1")){addCustomHeadingStyle(docxDocument, "标题 1", 1);paragraph.setStyle("标题 1");run.setBold(true);run.setColor("000000");run.setFontFamily("宋体");run.setFontSize(20);}else if(e.tagName().equals("h2")){addCustomHeadingStyle(docxDocument, "标题 2", 2);paragraph.setStyle("标题 2");run.setBold(true);run.setColor("000000");run.setFontFamily("宋体");run.setFontSize(18);}else if(e.tagName().equals("h3")){addCustomHeadingStyle(docxDocument, "标题 3", 3);paragraph.setStyle("标题 3");run.setBold(true);run.setColor("000000");run.setFontFamily("宋体");run.setFontSize(16);}else if(e.tagName().equals("p")){//内容paragraph.setAlignment(ParagraphAlignment.BOTH);//对齐⽅式paragraph.setIndentationFirstLine(WordUtil.ONE_UNIT);//⾸⾏缩进:567==1厘⽶run.setBold(false);run.setColor("001A35");run.setFontFamily("宋体");run.setFontSize(14);//run.addCarriageReturn();//回车键}else if(e.tagName().equals("break")){paragraph.setPageBreak(true);//段前分页(ctrl+enter)}四、设置页边距/*** 设置页边距 (word中1厘⽶约等于567)* @param document* @param left* @param top* @param right* @param bottom*/public static void setDocumentMargin(XWPFDocument document, String left,String top, String right, String bottom) {CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();CTPageMar ctpagemar = sectPr.addNewPgMar();if (StringUtils.isNotBlank(left)) {ctpagemar.setLeft(new BigInteger(left));}if (StringUtils.isNotBlank(top)) {ctpagemar.setTop(new BigInteger(top));}if (StringUtils.isNotBlank(right)) {ctpagemar.setRight(new BigInteger(right));}if (StringUtils.isNotBlank(bottom)) {ctpagemar.setBottom(new BigInteger(bottom));}}五、创建页眉/*** 创建默认页眉** @param docx XWPFDocument⽂档对象* @param text 页眉⽂本* @return返回⽂档帮助类对象,可⽤于⽅法链调⽤* @throws XmlException XML异常* @throws IOException IO异常* @throws InvalidFormatException ⾮法格式异常* @throws FileNotFoundException 找不到⽂件异常*/public static void createDefaultHeader(final XWPFDocument docx, final String text){CTP ctp = CTP.Factory.newInstance();XWPFParagraph paragraph = new XWPFParagraph(ctp, docx);ctp.addNewR().addNewT().setStringValue(text);ctp.addNewR().addNewT().setSpace(SpaceAttribute.Space.PRESERVE);CTSectPr sectPr = docx.getDocument().getBody().isSetSectPr() ? docx.getDocument().getBody().getSectPr() : docx.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(docx, sectPr);XWPFHeader header = policy.createHeader(STHdrFtr.DEFAULT, new XWPFParagraph[] { paragraph });header.setXWPFDocument(docx);}}六、创建页脚/*** 创建默认的页脚(该页脚主要只居中显⽰页码)** @param docx* XWPFDocument⽂档对象* @return返回⽂档帮助类对象,可⽤于⽅法链调⽤* @throws XmlException* XML异常* @throws IOException* IO异常*/public static void createDefaultFooter(final XWPFDocument docx) {// TODO 设置页码起始值CTP pageNo = CTP.Factory.newInstance();XWPFParagraph footer = new XWPFParagraph(pageNo, docx);CTPPr begin = pageNo.addNewPPr();begin.addNewPStyle().setVal(STYLE_FOOTER);begin.addNewJc().setVal(STJc.CENTER);pageNo.addNewR().addNewFldChar().setFldCharType(STFldCharType.BEGIN);pageNo.addNewR().addNewInstrText().setStringValue("PAGE \\* MERGEFORMAT");pageNo.addNewR().addNewFldChar().setFldCharType(STFldCharType.SEPARATE);CTR end = pageNo.addNewR();CTRPr endRPr = end.addNewRPr();endRPr.addNewNoProof();endRPr.addNewLang().setVal(LANG_ZH_CN);end.addNewFldChar().setFldCharType(STFldCharType.END);CTSectPr sectPr = docx.getDocument().getBody().isSetSectPr() ? docx.getDocument().getBody().getSectPr() : docx.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(docx, sectPr);policy.createFooter(STHdrFtr.DEFAULT, new XWPFParagraph[] { footer });}七、⾃定义标题样式(这个在我另⼀篇word基础中也有提及)* 增加⾃定义标题样式。
.NET使用NPOI读取Word模板并替换关键字并下载
.NET使⽤NPOI读取Word模板并替换关键字并下载NPOI 是 POI 项⽬的 .NET 版本。
POI是⼀个开源的Java读写Excel、WORD等微软OLE2组件⽂档的项⽬。
使⽤ NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL ⽂档进⾏读写NPOI下载地址:/以下代码仅供参考,请根据实际需求进⾏修改。
public MemoryStream Export(){string filepath = Server.MapPath("/word/xmxx.docx");using (FileStream stream = File.OpenRead(filepath)){XWPFDocument doc = new XWPFDocument(stream);//遍历段落foreach (var para in doc.Paragraphs){ReplaceKey(para);}//遍历表格var tables = doc.Tables;foreach (var table in tables){foreach (var row in table.Rows){foreach (var cell in row.GetTableCells()){foreach (var para in cell.Paragraphs){ReplaceKey(para);}}}}using (MemoryStream ms = new MemoryStream()){doc.Write(ms);return ms;}}}private void ReplaceKey(XWPFParagraph para){BLL.XmxxBLL XmxxBLL = new BLL.XmxxBLL();Model.Xmxx model = new Model.Xmxx();model = XmxxBLL.GetModel(20);string text = para.ParagraphText;var runs = para.Runs;string styleid = para.Style;for (int i = 0; i < runs.Count; i++){var run = runs[i];text = run.ToString();Type t = model.GetType();PropertyInfo[] pi = t.GetProperties();foreach (PropertyInfo p in pi){if (text.Contains("{$xmxx." + + "}")){text = text.Replace("{$xmxx." + + "}", mon.StringHelper.ToString(p.GetValue(model, null)));}}runs[i].SetText(text, 0);}}protected void Button1_Click(object sender, EventArgs e){using (MemoryStream ms = Export()){Response.ContentType = "application/vnd.ms-word";Response.ContentEncoding = Encoding.UTF8;Response.Charset = "";Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("123.doc", Encoding.UTF8));Response.BinaryWrite(Export().GetBuffer());Response.End();}}。
javaPOIHTML转Word两种方式
javaPOIHTML转Word两种⽅式说明,不论使⽤哪种⽅式,都不能引⽤CSS来渲染样式,⽽是使⽤style,或者将样式放在当前页⾯的<style></style>中⽅法⼀、1、引⽤的jar包<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.0</version></dependency>2、核⼼代码String html = "<div>测试内容</div";POIFSFileSystem poifs = null;FileOutputStream ostream = null;ByteArrayInputStream bais = null;String uuid = "测试.doc";File file = null;try { //HTML内容必须被<html><body></body></html>包装 fileParam.setcContent("<html><body>" + html + "</body></html>"); byte[] b = fileParam.getcContent().getBytes(); bais = new ByteArrayInputStream(b); poifs = new POIFSFileSystem(); DirectoryEntry directory = poifs.getRoot(); //WordDocument名称不允许修改 directory.createDocument("WordDocument", bais); ostream = new FileOutputStream(uuid); poifs.writeFilesystem(ostream);//当前⽬录下就⽣成了⼀个测试.doc的⽂档} catch (Exception e) { logger.error("exception is {}", e);} finally { IOUtils.closeQuietly(poifs); IOUtils.closeQuietly(ostream); IOUtils.closeQuietly(bais); try { FileUtils.forceDelete(file); } catch (Exception e2) { }}⽅法⼆/*** word格式html的标签头*/public static final String HTML_TAG_BGN = "<html xmlns=\"/TR/REC-html40\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:w=\"urn:schemas-microsoft-com:office public filePath downloadWordReport(String htmlForPrint) {try {String wordString = htmlForPrint.replaceAll("<head>", "").replaceAll("<html>", HTML_TAG_BGN );String fileName = new String("测试⽂件.doc".getBytes(), "UTF-8");//上传⽂件⽅法return this.upload(new ByteArrayInputStream(wordString.getBytes()), fileName);} catch (Exception e) {return null;}}。
POI转换worddoc文件为(html,xml,txt)
POI转换worddoc⽂件为(html,xml,txt)在POI中还存在有针对于word doc⽂件进⾏格式转换的功能。
我们可以将word的内容转换为对应的Html⽂件,也可以把它转换为底层⽤来描述doc⽂档的xml⽂件,还可以把它转换为底层⽤来描述doc⽂档的xml格式的text⽂件。
这些格式转换都是通过AbstractWordConverter特定的⼦类来完成的。
1 转换为Html⽂件将doc⽂档转换为对应的Html⽂档是通过WordToHtmlConverter类进⾏的。
它会尽量的利⽤Html的⽅式来呈现原⽂档的样式。
⽰例代码:/*** Word转换为Html* @throws Exception*/@Testpublic void testWordToHtml() throws Exception {InputStream is = new FileInputStream("D:\\test.doc");HWPFDocument wordDocument = new HWPFDocument(is);WordToHtmlConverter converter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());//对HWPFDocument进⾏转换converter.processDocument(wordDocument);Writer writer = new FileWriter(new File("D:\\converter.html"));Transformer transformer = TransformerFactory.newInstance().newTransformer();transformer.setOutputProperty( OutputKeys.ENCODING, "utf-8" );//是否添加空格transformer.setOutputProperty( OutputKeys.INDENT, "yes" );transformer.setOutputProperty( OutputKeys.METHOD, "html" );transformer.transform(new DOMSource(converter.getDocument() ),new StreamResult( writer ) );}2 转换为Xml⽂件将doc⽂档转换为对应的Xml⽂件是通过WordToFoConverter类进⾏的。
JAVA-实现-利用POI读取word文档实例
JAVA-实现-利⽤POI读取word⽂档实例package read.document;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.util.ArrayList;import java.util.List;import org.apache.poi.hwpf.HWPFDocument;import ermodel.CharacterRun;import ermodel.Range;import pers.mysql.DBUtil;import pers.mysql.MysqlDao;import pers.mysql.MysqlDaoImp;public class WordReading {public static void main(String[] args) {String filePath = "*****.doc";readOnWord(filePath);}public static void readOnWord(String filePath) {if (filePath.endsWith(".doc")) {// 输⼊流-基类InputStream is = null;try {is = new FileInputStream(filePath);} catch (FileNotFoundException e) {e.printStackTrace();System.out.println("⽂件打开失败。
");}// 加载doc⽂档try {HWPFDocument doc = new HWPFDocument(is);Range text = doc.getRange();// 整个⽂档/** 分解word:⽂本 ->⼩节 ->段落 ->characterRun(理解为⼩单元)* section -⼩节; paragraph - 段落*///1分出内容节点Range hotWord = text.getSection(2);// 0-封⾯,1-⽬录,2-⽂本;第3⼩节//2段落处理/** 维护两个变量** 热词和解释区别:⼤⼩-word:26,explaining:18**/String word = "";String explaining = "";int wordOK = 0;int explainOK = 0;// 判断当前word&explain是否可以填⼊数据库int count = 24;// 读取⼏条数据到数据库int begin = 2;// 段落读取位置for (int i = 0; i < count;) {Range para = hotWord.getParagraph(begin);CharacterRun field = para.getCharacterRun(0);int fontSize = field.getFontSize();if (fontSize == 26) {word = para.text();wordOK = 1;begin++;} else {while (fontSize < 26) {explaining += para.text();begin++;para = hotWord.getParagraph(begin); field = para.getCharacterRun(0);fontSize = field.getFontSize();}explainOK = 1;}// 判断word&explain是否可以填⼊数据库if (wordOK == 1 && explainOK == 1) {MysqlDaoImp.addData(word, explaining); i++;//填⼊数据库后,⼀切归"0"wordOK = 0;explainOK = 0;word="";explaining="";}}// 输出测试// System.out.println("读取:" + "head:");} catch (IOException e) {e.printStackTrace();System.out.println("IO错误。
Word文档转换为HTML帮助文档操作手册范本
Word文档转换为HTML帮助文档操作手册一、使用到的软件●DOC2CHM●Dreamweaver CS3●Help and manual 4二、操作步骤1. 先建立一个工作目录。
如hhwork。
2.将需要转换的文件复制到此工作目录下。
如果是中文文件名,最好将其改为英文文件名。
例:现在要将《小神探点检定修信息管理系统使用手册0.3.6.doc》转换为Html格式的帮助文档,首先将此文档复制到hhwork目录下并将其更名为manual36.doc。
如图1所示。
图13.打开软件DOC2CHM,然后找到manual36.doc,然后点击“Convert”按钮,如图2所示。
图24. 程序分析文档后,打开如图3所示的界面。
图35. 在图3所示的界面中选择默认的“Outline”,然后点击“Last>>”按钮,打开图4所示的界面。
图46. 在图4所示的界面中点击“Convert”按钮,程序开始将文档Manual36.doc转换为Html文档,并保存在Manual36子目录下。
7. 在子目录下的以Outline开头的文件夹下,将后缀名为jpg的文件名更改一下,目的是每个文件的名称不同。
8. 用Dreamweaver打开此目录中的所有htm文件,如图5。
图59. 在图5所示的界面中将出现在标题前的标签删除掉,然后将标题复制到标题框中。
然后将图片的更改正确。
10. 打开Help and Manual 4,如图6。
图611. 在图6所示的界面中点击“新建”按钮创建新的帮助方案。
如图7所示。
图712. 在图7所示的界面中选择“导入现有的文件从…”,然后选择“常规HTML和文本文件”,在下面的框中指定源文件夹的位置。
然后点击“下一步”。
程序打开图8所示的界面。
图813. 在上图中指定输出文件的位置,可以采用默认位置。
然后点击“下一步”打开图9所示的界面。
图914. 在图9所示的界面中将不需要的文件移除,然后点击“下一步”打开图10所示的界面。
xwpfdocument doc转
xwpfdocument doc转xwpfdocument是Apache POI库中的一个类,用于处理Microsoft Word文档(.docx)的读写操作。
在本篇文章中,我们将讨论如何使用xwpfdocument类将Word文档转换为其他格式。
1. 简介xwpfdocument是POI库中的核心类之一,它提供了一系列方法来读取、写入和修改Word文档。
这个类可以打开一个已存在的文档,也可以创建一个新的文档。
通过操作xwpfdocument对象,我们可以对文档的内容、样式和布局进行编辑。
2. 转换为PDF格式在许多情况下,我们希望将Word文档转换为PDF格式,以便在不同平台上进行共享和打印。
为了实现这个目标,我们可以使用Apache PDFBox库。
以下是一个示例代码,将一个.docx文档转换为.pdf格式。
```javaimport ermodel.XWPFDocument;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import org.apache.pdfbox.text.PDFTextStripper;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class WordToPDFConverter {public static void main(String[] args) {try {// 读取Word文档FileInputStream fis = new FileInputStream("input.docx");XWPFDocument document = new XWPFDocument(fis);// 创建PDF文档PDDocument pdfDoc = new PDDocument();PDPage page = new PDPage();pdfDoc.addPage(page);// 获取Word文档的内容String content = new XWPFWordExtractor(document).getText();// 将内容写入PDF文档PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, page);contentStream.beginText();contentStream.setFont(PDType1Font.TIMES_ROMAN, 12); contentStream.newLineAtOffset(100, 700);contentStream.showText(content);contentStream.endText();contentStream.close();// 保存PDF文档pdfDoc.save(new FileOutputStream("output.pdf"));pdfDoc.close();// 关闭Word文档document.close();fis.close();System.out.println("Word文档已成功转换为PDF格式。
javaword文档转html文件
javaword⽂档转html⽂件⼀、简介 ⼀般word⽂件后缀有doc、docx两种。
docx是office word 2007以及以后版本⽂档的扩展名;doc是office word 2003⽂档保存的扩展名。
对于这两种格式的word转换成html需要使⽤不同的⽅法。
对于docx格式的⽂档使⽤xdocreport进⾏转换。
依赖如下:<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document</artifactId><version>1.0.5</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId><version>1.0.5</version></dependency>对于docx格式的⽂档使⽤poi进⾏转换。
依赖如下:<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.12</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.12</version></dependency>⼆:⽰例 代码⽰例如下:1package com.test.word;23import java.io.File;4import java.io.FileInputStream;5import java.io.FileNotFoundException;6import java.io.FileOutputStream;7import java.io.IOException;8import java.io.InputStream;9import java.io.OutputStream;1011import javax.xml.parsers.DocumentBuilderFactory;12import javax.xml.parsers.ParserConfigurationException;13import javax.xml.transform.OutputKeys;14import javax.xml.transform.Transformer;15import javax.xml.transform.TransformerException;16import javax.xml.transform.TransformerFactory;17import javax.xml.transform.dom.DOMSource;18import javax.xml.transform.stream.StreamResult;1920import org.apache.poi.hwpf.HWPFDocument;21import org.apache.poi.hwpf.converter.PicturesManager;22import org.apache.poi.hwpf.converter.WordToHtmlConverter;23import ermodel.PictureType;24import org.apache.poi.xwpf.converter.core.FileImageExtractor;25import org.apache.poi.xwpf.converter.core.FileURIResolver;26import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;27import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;28import ermodel.XWPFDocument;29import org.junit.Test;30import org.w3c.dom.Document;3132/**33 * word 转换成html34*/35public class WordToHtml {3637/**38 * 2007版本word转换成html39 * @throws IOException40*/41 @Test42public void Word2007ToHtml() throws IOException {43 String filepath = "C:/test/";44 String fileName = "滕王阁序2007.docx";45 String htmlName = "滕王阁序2007.html";46final String file = filepath + fileName;47 File f = new File(file);48if (!f.exists()) {49 System.out.println("Sorry File does not Exists!");50 } else {51if (f.getName().endsWith(".docx") || f.getName().endsWith(".DOCX")) {5253// 1) 加载word⽂档⽣成 XWPFDocument对象54 InputStream in = new FileInputStream(f);55 XWPFDocument document = new XWPFDocument(in);5657// 2) 解析 XHTML配置 (这⾥设置IURIResolver来设置图⽚存放的⽬录)58 File imageFolderFile = new File(filepath);59 XHTMLOptions options = XHTMLOptions.create().URIResolver(new FileURIResolver(imageFolderFile));60 options.setExtractor(new FileImageExtractor(imageFolderFile));61 options.setIgnoreStylesIfUnused(false);62 options.setFragment(true);6364// 3) 将 XWPFDocument转换成XHTML65 OutputStream out = new FileOutputStream(new File(filepath + htmlName));66 XHTMLConverter.getInstance().convert(document, out, options);6768//也可以使⽤字符数组流获取解析的内容69// ByteArrayOutputStream baos = new ByteArrayOutputStream();70// XHTMLConverter.getInstance().convert(document, baos, options);71// String content = baos.toString();72// System.out.println(content);73// baos.close();74 } else {75 System.out.println("Enter only MS Office 2007+ files");76 }77 }78 }7980/**81 * /**82 * 2003版本word转换成html83 * @throws IOException84 * @throws TransformerException85 * @throws ParserConfigurationException86*/87 @Test88public void Word2003ToHtml() throws IOException, TransformerException, ParserConfigurationException {89 String filepath = "C:/test/";90final String imagepath = "C:/test/image/";91 String fileName = "滕王阁序2003.doc";92 String htmlName = "滕王阁序2003.html";93final String file = filepath + fileName;94 InputStream input = new FileInputStream(new File(file));95 HWPFDocument wordDocument = new HWPFDocument(input);96 WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()); 97//设置图⽚存放的位置98 wordToHtmlConverter.setPicturesManager(new PicturesManager() {99public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches) {100 File imgPath = new File(imagepath);101if(!imgPath.exists()){//图⽚⽬录不存在则创建102 imgPath.mkdirs();103 }104 File file = new File(imagepath + suggestedName);105try {106 OutputStream os = new FileOutputStream(file);107 os.write(content);108 os.close();109 } catch (FileNotFoundException e) {110 e.printStackTrace();111 } catch (IOException e) {112 e.printStackTrace();113 }114return imagepath + suggestedName;115 }116 });117118//解析word⽂档119 wordToHtmlConverter.processDocument(wordDocument);120 Document htmlDocument = wordToHtmlConverter.getDocument();121122 File htmlFile = new File(filepath + htmlName);123 OutputStream outStream = new FileOutputStream(htmlFile);124125//也可以使⽤字符数组流获取解析的内容126// ByteArrayOutputStream baos = new ByteArrayOutputStream();127// OutputStream outStream = new BufferedOutputStream(baos);128129 DOMSource domSource = new DOMSource(htmlDocument);130 StreamResult streamResult = new StreamResult(outStream);131132 TransformerFactory factory = TransformerFactory.newInstance(); 133 Transformer serializer = factory.newTransformer();134 serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); 135 serializer.setOutputProperty(OutputKeys.INDENT, "yes");136 serializer.setOutputProperty(OutputKeys.METHOD, "html"); 137138 serializer.transform(domSource, streamResult);139140//也可以使⽤字符数组流获取解析的内容141// String content = baos.toString();142// System.out.println(content);143// baos.close();144 outStream.close();145 }146 } 运⾏⽣存⽂件结果如下:。
使用poi读取word2007(.docx)中的复杂表格
使⽤poi读取word2007(.docx)中的复杂表格最近⼯作需要做⼀个读取word(.docx)中的表格,并以html形式输出。
这⾥使⽤了poi。
对于2007及之后的word⽂档,需要导⼊poi-ooxml-xxx.jar及其依赖包,如下图(图中为使⽤maven):pom.xml对于简单表格,可以使⽤如下⽅式来获取每个表格的内容:XWPFDocument document = new XWPFDocument(new FileInputStream("word.docx"));// 获取所有表格List<XWPFTable> tables = document.getTables();for (XWPFTable table : tables) {// 获取表格的⾏List<XWPFTableRow> rows = table.getRows();for (XWPFTableRow row : rows) {// 获取表格的每个单元格List<XWPFTableCell> tableCells = row.getTableCells();for (XWPFTableCell cell : tableCells) {// 获取单元格的内容String text = cell.getText();}}}但是对于复杂表格(含合并的单元格),则⽆法正常处理。
于是继续上⽹查询,在stackoverflow查到如下⽣成含有合并的单元格的表格:public class CreateWordTableMerge {static void mergeCellVertically(XWPFTable table, int col, int fromRow, int toRow) {for(int rowIndex = fromRow; rowIndex <= toRow; rowIndex++){CTVMerge vmerge = CTVMerge.Factory.newInstance();if(rowIndex == fromRow){// The first merged cell is set with RESTART merge valuevmerge.setVal(STMerge.RESTART);} else {// Cells which join (merge) the first one, are set with CONTINUEvmerge.setVal(STMerge.CONTINUE);}XWPFTableCell cell = table.getRow(rowIndex).getCell(col);// Try getting the TcPr. Not simply setting an new one every time.CTTcPr tcPr = cell.getCTTc().getTcPr();if (tcPr != null) {tcPr.setVMerge(vmerge);} else {// only set an new TcPr if there is not one alreadytcPr = CTTcPr.Factory.newInstance();tcPr.setVMerge(vmerge);cell.getCTTc().setTcPr(tcPr);}}}static void mergeCellHorizontally(XWPFTable table, int row, int fromCol, int toCol) {for(int colIndex = fromCol; colIndex <= toCol; colIndex++){CTHMerge hmerge = CTHMerge.Factory.newInstance();if(colIndex == fromCol){// The first merged cell is set with RESTART merge valuehmerge.setVal(STMerge.RESTART);} else {CTTcPr tcPr = cell.getCTTc().getTcPr();if (tcPr != null) {tcPr.setHMerge(hmerge);} else {// only set an new TcPr if there is not one alreadytcPr = CTTcPr.Factory.newInstance();tcPr.setHMerge(hmerge);cell.getCTTc().setTcPr(tcPr);}}}public static void main(String[] args) throws Exception {XWPFDocument document= new XWPFDocument();XWPFParagraph paragraph = document.createParagraph();XWPFRun run=paragraph.createRun();run.setText("The table:");//create tableXWPFTable table = document.createTable(3,5);for (int row = 0; row < 3; row++) {for (int col = 0; col < 5; col++) {table.getRow(row).getCell(col).setText("row " + row + ", col " + col);}}//create and set column widths for all columns in all rows//most examples don't set the type of the CTTblWidth but this//is necessary for working in all office versionsfor (int col = 0; col < 5; col++) {CTTblWidth tblWidth = CTTblWidth.Factory.newInstance();tblWidth.setW(BigInteger.valueOf(1000));tblWidth.setType(STTblWidth.DXA);for (int row = 0; row < 3; row++) {CTTcPr tcPr = table.getRow(row).getCell(col).getCTTc().getTcPr();if (tcPr != null) {tcPr.setTcW(tblWidth);} else {tcPr = CTTcPr.Factory.newInstance();tcPr.setTcW(tblWidth);table.getRow(row).getCell(col).getCTTc().setTcPr(tcPr);}}}//using the merge methodsmergeCellVertically(table, 0, 0, 1);mergeCellHorizontally(table, 1, 2, 3);mergeCellHorizontally(table, 2, 1, 4);paragraph = document.createParagraph();FileOutputStream out = new FileOutputStream("create_table.docx");document.write(out);System.out.println("create_table.docx written successully");}}运⾏⼀下确实可以实现,不过仍是⼀头雾⽔,对于其中的cTTc,tcPr,vMerge等属性仍是不知道是什么。
poi读取word文档
poi读取word⽂档⽬录1 读docx⽂件 1.1 通过XWPFWordExtractor读 1.2 通过XWPFDocument读2 写docx⽂件 2.1 直接通过XWPFDocument⽣成 2.2 以docx⽂件作为模板POI在读写word docx⽂件时是通过xwpf模块来进⾏的,其核⼼是XWPFDocument。
⼀个XWPFDocument代表⼀个docx⽂档,其可以⽤来读docx⽂档,也可以⽤来写docx⽂档。
XWPFDocument中主要包含下⾯这⼏种对象: l XWPFParagraph:代表⼀个段落。
l XWPFRun:代表具有相同属性的⼀段⽂本。
l XWPFTable:代表⼀个表格。
l XWPFTableRow:表格的⼀⾏。
l XWPFTableCell:表格对应的⼀个单元格。
1 读docx⽂件跟读doc⽂件⼀样,POI在读docx⽂件的时候也有两种⽅式,通过XWPFWordExtractor和通过XWPFDocument。
在XWPFWordExtractor 读取信息时其内部还是通过XWPFDocument来获取的。
1.1 通过XWPFWordExtractor读在使⽤XWPFWordExtractor读取docx⽂档的内容时,我们只能获取到其⽂本,⽽不能获取到其⽂本对应的属性值。
下⾯是⼀段使⽤XWPFWordExtractor来读取docx⽂档内容的⽰例代码:public class XwpfTest {/*** 通过XWPFWordExtractor访问XWPFDocument的内容* @throws Exception*/@Testpublic void testReadByExtractor() throws Exception {InputStream is = new FileInputStream("D:\\test.docx");XWPFDocument doc = new XWPFDocument(is);XWPFWordExtractor extractor = new XWPFWordExtractor(doc);String text = extractor.getText();System.out.println(text);CoreProperties coreProps = extractor.getCoreProperties();this.printCoreProperties(coreProps);this.close(is);}* 输出CoreProperties信息* @param coreProps*/private void printCoreProperties(CoreProperties coreProps) {System.out.println(coreProps.getCategory()); //分类System.out.println(coreProps.getCreator()); //创建者System.out.println(coreProps.getCreated()); //创建时间System.out.println(coreProps.getTitle()); //标题}/*** 关闭输⼊流* @param is*/private void close(InputStream is) {if (is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}} 1.2 通过XWPFDocument读在通过XWPFDocument读取docx⽂档时,我们就可以获取到⽂本⽐较精确的属性信息了。
JAVA:借用OpenOffice将上传的Word文档转换成Html格式
本文由我司收集整编,推荐下载,如有疑问,请与我司联系JAVA:借用OpenOffice 将上传的Word 文档转换成Html 格式2013/09/24 0 为什么会想起来将上传的word 文档转换成html 式呢?设想,如果一个系统需要发布在页面的文章都是来自word 文档,一般会执行下面的流程:使用word 打开文档,Ctrl A,进入发布文章页面,Ctrl V。
看起来也不麻烦,但是,如果文档中包含大量图片呢?尴尬的事是图片都需要重新上传吧?如果可以将已经编写好的word 文档上传到服务器就可以在相应页面进行展示,将会是一件非常惬意的事情,最起码信息发布人员会很开心。
程序员可能就不会这么想了,囧。
将Word 转Html 的原理是这样的:1、客户上传Word 文档到服务器2、服务器调用OpenOffice 程序打开上传的Word 文档3、OpenOffice 将Word 文档另存为Html 式4、Over至此可见,这要求服务器端安装OpenOffice 软件,其实也可以是MS Office,不过OpenOffice 的优势是跨平台,你懂的。
恩,说明一下,本文的测试基于MS Win7 Ultimate X64 系统。
下面就是规规矩矩的实现。
1、下载OpenOffice,download.openoffice/index.htmlSo easy...2、下载Jodconverter artofsolving/opensource/jodconverter 这是一个开启OpenOffice进行式转化的第三方jar 包。
3、泡杯热茶,等待下载。
4、安装OpenOffice,安装结束后,调用cmd,启动OpenOffice 的一项服务:C:\Program Files (x86)\OpenOffice 3\program soffice -headless -accept=socket,port=8100;urp;5、打开eclipse6、喝杯热茶,等待eclipse 打开。
php将word转换为html格式代码分析
php将word转换为html格式代码分析PHP将上传word⽂件,转化为Html格式,(多种转换⽅式)1、通过PHPOffice1: composer require phpoffice/phpword2: 安装成功可看到 vendor⽂件夹3: 使⽤⽅法 :require 'vendor/autoload.php';$phpWord = \PhpOffice\PhpWord\IOFactory::load('./4.docx');$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "HTML");$xmlWriter ->save('./ceshi.htm');4:官⽅2、通过pythonfrom win32com import client as wcimport sysdef saveHtm():# print(wordPath)# print(htmPath)wordPath='E:/1.doc'htmPath='E:/1.htm'word = wc.Dispatch('Word.Application')print(word)doc = word.Documents.Open('E:/1.doc')doc.SaveAs("E:/1.htm", 8) //转化为htm格式doc.SvaeAs("E:/1.fpt",17)doc.Close()word.Quit()if __name__ == '__main__':saveHtm()3、同时Offic API直接在⽹页显⽰word⽂档。
src="/op/view.aspx?src=公⽹上能访问的word⽂档地址" >例src="/op/view.aspxsrc=%2Ff%2Fele%2Bnewsletter.docx"4、通过com组件需要所在宿主机,有offic的环境,Linxu下不能使⽤实例扩展:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>接收上传⽂件</title><?php$conn = @new COM("ADODB.Connection");$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("person.mdb");$conn->Open($connstr);$uploaddir = 'uploads/';if(!is_dir($uploaddir)){mkdir($uploaddir);}$filename =$_FILES['filename']['name'];$filename =substr($_FILES['filename']["name"],0,strpos($_FILES['filename']["name"],"."));echo $filename;echo "<br>";$uploadfile = $uploaddir.$filename.substr($_FILES['filename']["name"],strpos($_FILES['filename']["name"],"."));//⽬录名.⽂件名.后缀名echo $uploadfile;echo "<br>";$temploadfile = $_FILES['filename']['tmp_name'];echo $temploadfile;echo "<br>";move_uploaded_file($temploadfile , $uploadfile); //移动⽂件$path = $_SERVER['SCRIPT_FILENAME'];$filepath = $_SERVER["PHP_SELF"];$path = substr($path,0,strpos($path,$filepath));echo $path;echo "<br>";echo $filepath;$htmlpath = $path."/shiyan4/".$uploadfile;echo "<br>";echo $htmlpath;word2html($htmlpath);//$query =@mysql_query( "Insert into $username(fname,file)values('$filename','$uploadfile')")or die("error");><?php///f?kz=13975389function word2html($wfilepath){$word=new COM("Word.Application") or die("⽆法打开 MS Word");$word->visible = 1 ;$word->Documents->Open($wfilepath)or die("⽆法打开这个⽂件");$htmlpath=substr($wfilepath,0,-4);$word->ActiveDocument->SaveAs($htmlpath,8);$word->quit(0);}print( "Word转html完成!" );></head><body></body></html>以上就是php将word转换为html格式代码分析的详细内容,更多关于php将word转换为html格式的⽅法的资料请关注其它相关⽂章!。
Java使用poi将word转换为html
Java使⽤poi将word转换为html 使⽤poi将word转换为html,⽀持doc,docx,转换后可以保持图⽚、样式。
1.导⼊Maven包<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.14</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.14</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.14</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>xdocreport</artifactId><version>1.0.6</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.14</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.3</version></dependency>2.转换代码import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.converter.WordToHtmlConverter;import org.apache.poi.xwpf.converter.core.BasicURIResolver;import org.apache.poi.xwpf.converter.core.FileImageExtractor;import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;import ermodel.XWPFDocument;import org.w3c.dom.Document;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.OutputStreamWriter;public class Test {// doc转换为htmlvoid docToHtml() throws Exception {String sourceFileName = "C:\\doc\\test.doc";String targetFileName = "C:\\html\\test.html";String imagePathStr = "C:\\html\\image\\";HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(sourceFileName));Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(document);// 保存图⽚,并返回图⽚的相对路径wordToHtmlConverter.setPicturesManager((content, pictureType, name, width, height) -> {try(FileOutputStream out = new FileOutputStream(imagePathStr + name)){out.write(content);} catch (Exception e) {e.printStackTrace();}return "image/" + name;});wordToHtmlConverter.processDocument(wordDocument);Document htmlDocument = wordToHtmlConverter.getDocument();DOMSource domSource = new DOMSource(htmlDocument);StreamResult streamResult = new StreamResult(new File(targetFileName));TransformerFactory tf = TransformerFactory.newInstance();Transformer serializer = tf.newTransformer();serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");serializer.setOutputProperty(OutputKeys.INDENT, "yes");serializer.setOutputProperty(OutputKeys.METHOD, "html");serializer.transform(domSource, streamResult);}// docx转换为htmlpublic void docxToHtml() throws Exception {String sourceFileName = "D:\\ac\\00.docx";String targetFileName = "D:\\ac\\test.html";String imagePathStr = "D:\\ac\\image\\";OutputStreamWriter outputStreamWriter = null;try {XWPFDocument document = new XWPFDocument(new FileInputStream(sourceFileName));XHTMLOptions options = XHTMLOptions.create();// 存放图⽚的⽂件夹options.setExtractor(new FileImageExtractor(new File(imagePathStr)));// html中图⽚的路径options.URIResolver(new BasicURIResolver("image"));outputStreamWriter = new OutputStreamWriter(new FileOutputStream(targetFileName), "utf-8"); XHTMLConverter xhtmlConverter = (XHTMLConverter) XHTMLConverter.getInstance();xhtmlConverter.convert(document, outputStreamWriter, options);} finally {if (outputStreamWriter != null) {outputStreamWriter.close();}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java平台,使用openoffice将word转换为html
java环境下将word转换为html目前没有很简单的方法。
使用openOffice实现应该算是“矬子里面拔大个”。
1,首先下载openOffice。
这是个第三方开源的项目,专门用于在java环境中进行类似word 文档编写(要是连个word编辑都做不出来,那java在外行心目中地位就蹭蹭地下去了)。
我下载的是 3.2版本。
2,下载后安装。
通过cmd进入“安装目录\ 3\program”文件夹下。
运行一下命令soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard意思是启动openoffice的一个服务,以备为其他程序使用(看看咱们的开源领袖多大方,不像微软那么小气,生怕自己的用)。
3,测试一下8100端口是否能使用。
cmd命令“telnet localhost 8100”,如果开启了,就会有黑的不能再黑的屏幕显现,如果没开启,就会出现连接不上的消息。
4,下载jodconverter项目,我下的是2.2.2版本。
(咱就不重复制造轮子了,直接就上车吧!)5,自己创建项目,把jodconverter文件夹lib中的所有jar包都引用一下。
然后写下以下代码public static void main(String args[]) {File inputFile = new File("D:\\test\\广告测试.doc");File outputFile = new File("D:\\test\\广告测试.html");OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);try{connection.connect();}catch(Exception e){e.printStackTrace();}DocumentConverter converter = new OpenOfficeDocumentConverter(connection);converter.convert(inputFile, outputFile);connection.disconnect();}然后就运行一下,应该没什么问题。
POI读取word(word2003和word2007)(转)
POI读取word(word2003和word2007)(转)最近在给客户做系统的时候,⽤户提出需求,要能够导⼊ word ⽂件,现在 microsoft word 有好⼏个版本 97、2003、2007的,这三个版本存储数据的格式上都有相当⼤的差别,⽽现在 97 基本上已经退出市场,⼏乎没有⼈⽤这个版本了,所以在我们的系统中只考虑 2003 版本和 2007 版本的,因为我们只要求能够读取 word 中的⽂字内容即可,其中的⽂字样式、图⽚等信息可以忽略,也不⽤直接操作 word ⽂件,所以我们选择⽤ apache 的 POI 进⾏读取。
读取 2003 版本(.doc)的word⽂件相对来说⽐较简单,只需要 poi-3.5-beta6-20090622.jar 和 poi-scratchpad-3.5-beta6-20090622.jar 两个jar 包即可,⽽ 2007 版本(.docx)就⿇烦多,我说的这个⿇烦不是我们写代码的时候⿇烦,是要导⼊的 jar 包⽐较的多,有如下 7 个之多: 1. openxml4j-bin-beta.jar 2. poi-3.5-beta6-20090622.jar 3. poi-ooxml-3.5-beta6-20090622.jar 4 .dom4j-1.6.1.jar 5. geronimo-stax-api_1.0_spec-1.0.jar 6. ooxml-schemas-1.0.jar 7. xmlbeans-2.3.0.jar 其中 4-7 是 poi-ooxml-3.5-beta6-20090622.jar 所依赖的 jar 包(在poi-bin-3.5-beta6-20090622.tar.gz 中的 ooxml-lib ⽬录下可以找到)。
[java]1. import java.io.File;2. import java.io.FileInputStream;3. import java.io.InputStream;4.5. import org.apache.poi.POIXMLDocument;6. import org.apache.poi.POIXMLTextExtractor;7. import org.apache.poi.hwpf.extractor.WordExtractor;8. import org.apache.poi.openxml4j.opc.OPCPackage;9. import org.apache.poi.xwpf.extractor.XWPFWordExtractor;10.11. /**12. * POI 读取 word 2003 和 word 2007 中⽂字内容的测试类<br />13. * @createDate 2009-07-2514. * @author Carl He15. */16. public class Test {17. public static void main(String[] args) {18. try {19. //word 2003:图⽚不会被读取20. InputStream is = new FileInputStream(new File("c://files//2003.doc"));21. WordExtractor ex = new WordExtractor(is);22. String text2003 = ex.getText();23. System.out.println(text2003);24.25. //word 2007 图⽚不会被读取,表格中的数据会被放在字符串的最后26. OPCPackage opcPackage = POIXMLDocument.openPackage("c://files//2007.docx");27. POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);28. String text2007 = extractor.getText();29. System.out.println(text2007);30.31. } catch (Exception e) {32. e.printStackTrace();33. }34. }35. }如果想下载完整的⽰例代码,可以,这个 rar 包中有 POI 读取word 2003 和 word 2007 所需要的全部 jar 包和 word 2003、word 2007 ⽰例⽂件。
java poi xwpfsdt 获取格式
Java POI XWPFSDT 获取格式一、简介在Java开发中,Apache POI是一个流行的用于操作Microsoft Office文件(如Word、Excel)的开源库。
在使用POI操作Word文档时,XWPFSDT是一个重要的类,用于获取文本的格式。
二、什么是XWPFSDTXWPFSDT(Simple Decorated Text)是Word文档中的一种特殊文本格式,它可以包含格式化文本、表格、图像等。
在使用POI操作Word文档时,我们经常需要获取XWPFSDT中的文本内容和格式。
三、XWPFSDT 获取格式的方法1. 获取文本内容要获取XWPFSDT中的文本内容,可以使用POI提供的getText()方法。
示例代码:```javaXWPFDocument doc = new XWPFDocument(new FileInputStream("example.docx"));List<XWPFSDT> sdtList = doc.getCustomXMLDatas();for (XWPFSDT sdt : sdtList) {System.out.println(sdt.getText());}```2. 获取文本格式除了获取文本内容外,有时候我们还需要获取XWPFSDT中文本的格式,比如字体、颜色、大小等。
可以使用POI提供的getStyle()方法。
示例代码:```javaXWPFDocument doc = new XWPFDocument(new FileInputStream("example.docx"));List<XWPFSDT> sdtList = doc.getCustomXMLDatas();for (XWPFSDT sdt : sdtList) {System.out.println("文本内容:" + sdt.getText());System.out.println("文本格式:" + sdt.getStyle());}```四、XWPFSDT 获取格式的应用1. 数据处理通过获取XWPFSDT中文本的格式,可以实现对文本内容的灵活处理。
word转换成html的方法
word转换成html的⽅法之前⽤到了word转换成HTMl的做法,⽹上找过⼀段类似的代码,后发现好多不能执⾏,调试了半天才最终搞定。
⽅法接参数是word⽂件路径。
执⾏这样的代码,需要添加 Microsoft.Office.Interop.Word.dll引⽤。
///<summary>/// Word转换为HTML///</summary>///<param name="path"></param>private string WordToHTMl(ref string path){string pageUrl = null;object fltDocFormat = 10; //For filtered HTML Outputobject missing = System.Reflection.Missing.Value;object readOnly = false; //Open file in readOnly modeobject isVisible = false;//The process has to be in invisible modeobject fileName = path;//获取⽹站服务器端的路径string newPath = System.Web.HttpContext.Current.Server.MapPath("/ConvertFiles/");string newFileName = System.IO.Path.GetFileNameWithoutExtension(fileName.ToString());object saveFileName = newPath + savePath + newFileName + ".html";//判断⽂件是否被转换if (!System.IO.File.Exists(SaveFileName)){Microsoft.Office.Interop.Word.ApplicationClass objWord = new Microsoft.Office.Interop.Word.ApplicationClass();//打开word⽂档objWord.Documents.Open(ref fileName, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing, //Do the background activityobjWord.Visible = false;Microsoft.Office.Interop.Word.Document oDoc = objWord.ActiveDocument;oDoc.SaveAs(ref saveFileName, ref fltDocFormat, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); oDoc.Close(ref missing, ref missing, ref missing);objWord.Quit(ref missing, ref missing, ref missing);//Process[] myProcesses = Process.GetProcessesByName("WINWORD");//foreach (Process myProcess in myProcesses)//{// myProcess.Kill();//}// string pageUrl = newFileName + ".html";// System.Web.HttpContext.Current.Server.Transfer(pageUrl);}else{//页⾯路径pageUrl = IpPath + FileName + ".html";}return pageUrl;}。
使用POI提取Word文件的文本内容
使用POI提取Word文件的文本内容1. 首先,将POI库添加到Java项目中的依赖项中。
可以通过将以下依赖项添加到项目的pom.xml文件中,来引入POI库:```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>```2. 创建一个`File`对象,指定要读取的Word文件:```javaFile file = new File("path/to/word/file.docx");```3. 创建一个`FileInputStream`对象,将文件包装到输入流中:```javaFileInputStream fis = new FileInputStream(file);```4. 使用`XWPFDocument`类来加载Word文件中的内容:```javaXWPFDocument document = new XWPFDocument(fis);```5. 创建一个`XWPFWordExtractor`对象,将文档对象传递给它:```javaXWPFWordExtractor extractor = newXWPFWordExtractor(document);```6. 调用`getText(`方法来提取文本内容:```javaString text = extractor.getText(;```7.最后,关闭输入流和释放资源:```javafis.close(;document.close(;```完整的代码示例:```javaimport org.apache.poi.xwpf.extractor.XWPFWordExtractor;import ermodel.XWPFDocument;import java.io.File;import java.io.FileInputStream;import java.io.IOException;public class WordExtractorpublic static void main(String[] args)tryFile file = new File("path/to/word/file.docx");FileInputStream fis = new FileInputStream(file);XWPFDocument document = new XWPFDocument(fis);XWPFWordExtractor extractor = newXWPFWordExtractor(document);String text = extractor.getText(;System.out.println(text);fis.close(;document.close(;} catch (IOException e)e.printStackTrace(;}}```注意:该代码示例适用于提取扩展名为.docx的Word文件的文本内容。
Java使用POI读取Word中的表格
Java使⽤POI读取Word中的表格代码package live.autu.word;import java.io.FileInputStream;import org.apache.poi.hwpf.HWPFDocument;import ermodel.Paragraph;import ermodel.Range;import ermodel.Table;import ermodel.TableCell;import ermodel.TableIterator;import ermodel.TableRow;import org.apache.poi.poifs.filesystem.POIFSFileSystem;/*** Hello world!**/public class App {public static void main(String[] args) {//doc⽂档路径String filePath = "C:\\Users\\autu\\Desktop\\test.doc";//test.print(filePath,"第⼀个表");System.out.println(App.read(filePath,"第⼀个表"));;}/*** 读取⽂档中表格* @param filePath doc路径* @param set 第⼏个表格*/public static String read(String filePath,String tableName) {StringBuilder sb=new StringBuilder();try (FileInputStream in = new FileInputStream(filePath); // 载⼊⽂档POIFSFileSystem pfs = new POIFSFileSystem(in);HWPFDocument hwpf = new HWPFDocument(pfs);) {Range range = hwpf.getRange();// 得到⽂档的读取范围TableIterator it = new TableIterator(range);// 迭代⽂档中的表格while (it.hasNext()) {Table tb = (Table) it.next();// 迭代⾏,默认从0开始,可以依据需要设置i的值,改变起始⾏数,也可设置读取到那⾏,只需修改循环的判断条件即可outer:for (int i = 0; i < tb.numRows(); i++) {TableRow tr = tb.getRow(i);// 迭代列,默认从0开始for (int j = 0; j < tr.numCells(); j++) {TableCell td = tr.getCell(j);// 取得单元格// 取得单元格的内容for (int k = 0; k < td.numParagraphs(); k++) {Paragraph para = td.getParagraph(k);String s = para.text();// 去除后⾯的特殊符号if (null != s && !"".equals(s)) {s = s.substring(0, s.length() - 1);}s=s.trim();if(tableName.trim().equals(s)||i!=0) {sb.append(s + "\t");} else {break outer;}}}sb.append( "\n");}}} catch (Exception e) {e.printStackTrace();}return sb.toString();}}依赖<dependency><groupId>org.apache.poi</groupId> <artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.0.1</version></dependency>效果图test.doc控制台打印。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
87.//当前字符
88.charcurrentChar = cr.text().charAt(0);
89.
90.//判断是否为回车符
91.if(currentChar == ENTER_ASCII)
92.tempString +="<br/>";
93.//判断是否为空格符
94.elseif(currentChar == SPACE_ASCII)
44.
45./**
46.*读取每个文字样式
47.*
48.* @param fileName
49.* @throws Exception
50.*/
51.publicvoidgetWordAndStyle(String fileName)throwsException {
52.
53.FileInputStream in =newFileInputStream(newFile(fileName));
101.
102.String fontStyle ="<span style='font-family:"+ cr.getFontName() +";font-size:"+ cr.getFontSize() /2+"pt;";
103.
104.if(cr.isBold())
105.fontStyle +="font-weight:bold;";
11.importjava.io.IOException;
12.importjava.io.OutputStream;
13.importjava.io.OutputStreamWriter;
14.
15.importorg.apache.poi.hwpf.HWPFDocument;
16.importorg.apache.poi.hwpf.model.PicturesTable;
54.
55.HWPFDocument doc =newHWPFDocument(in);
56.
57.//取得文档中字符的总数
58.intlength = doc.characterLength();
59.
60.//创建图片容器
61.PicturesTable pTable = doc.getPicturesTable();
ermodel.CharacterRun;
ermodel.Picture;
ermodel.Range;
20.
21./**
74.
75.if(pTable.hasPicture(cr)) {
76.
77.//读写图片
78.this.readPicture(pTable, cr);
79.
80.}else{
81.
82.Range range2 =newRange(i +1, i +2, doc);
83.
84.//第二个字符
85.CharacterRun cr2 = range2.getCharacterRun(0);
POI读取word转换html
文章分类:Java编程
apache POI读取word文档的文档比较少,所以只有自己慢慢的摸索,这篇文章也属于比较基础入门的,主要是针对读取word中的图片,以及文字的各种样式,如有不好的地方,请各位多多指教!
JavБайду номын сангаас代码
1./**
2.*
3.*/
4.packagecom.util;
95.tempString +=" ";
96.//判断是否为水平制表符
97.elseif(currentChar == TABULATION_ASCII)
98.tempString +=" ";
99.//比较前后2个字符是否具有相同的格式
100.booleanflag = compareCharStyle(cr, cr2);
106.if(cr.isItalic())
107.fontStyle +="font-style:italic;";
108.
109.if(flag && i != length -2)
110.tempString += currentChar;
35.*/
36.privatestaticfinalshortSPACE_ASCII =32;
37.
38./**
39.*水平制表符ASCII码
40.*/
41.privatestaticfinalshortTABULATION_ASCII =9;
42.
43.privateString htmlText ="";
5.
6.importjava.io.BufferedWriter;
7.importjava.io.File;
8.importjava.io.FileInputStream;
9.importjava.io.FileNotFoundException;
10.importjava.io.FileOutputStream;
22.*
23.* @author张廷下午10:36:40
24.*
25.*/
26.publicclassWordToHtml {
27.
28./**
29.*回车符ASCII码
30.*/
31.privatestaticfinalshortENTER_ASCII =13;
32.
33./**
34.*空格符ASCII码
68.
69.for(inti =0; i < length -1; i++) {
70.//整篇文章的字符通过一个个字符的来判断,range为得到文档的范围
71.Range range =newRange(i, i +1, doc);
72.
73.CharacterRun cr = range.getCharacterRun(0);
62.
63.htmlText ="<html><head><title>"+ doc.getSummaryInformation().getTitle() +"</title></head><body>";
64.
65.//创建临时字符串,好加以判断一串字符是否存在相同格式
66.
67.String tempString ="";