用户登录
用户注册

分享至

hwpfdocumentword

  • 作者: 羞涩的小鸡
  • 来源: 51数据库
  • 2020-04-21

一、HWPFDocument 获取word目录与链接,形成(key,value)的形式

/* * 文 件 名: MSWordPoi4.java * 版 权: Sunny Technologies Co., Ltd. Copyright YYYY-YYYY, All rights reserved * 描 述: <描述> * 修 改 人: L.Hao * 修改时间: 2014-8-8 * 跟踪单号: <跟踪单号> * 修改单号: <修改单号> * 修改内容: <修改内容> */package com.test;/** * <一句话功能简述> * <功能详细描述> * * @author L.Hao * @version [版本号, 2014-8-8] * @see [相关类/方法] * @since [产品/模块版本] */import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.model.FieldsDocumentPart;import org.apache.poi.hwpf.usermodel.Field;import org.apache.poi.hwpf.usermodel.Fields;import org.apache.poi.hwpf.usermodel.Paragraph;import org.apache.poi.hwpf.usermodel.Range;import org.apache.poi.hwpf.usermodel.Table;import org.apache.poi.hwpf.usermodel.TableCell;import org.apache.poi.hwpf.usermodel.TableIterator;import org.apache.poi.hwpf.usermodel.TableRow;public class MSWordPoi4{ /** * @param args */ public static void main(String[] args) { Map map = new HashMap(); map.put("${sub}", "湖南大学"); map.put("${item2.school}", "湖南大学"); map.put("${item2.address}", "湖南");// map.put("${item1.name}", "王五1");// map.put("${item1.numberStudent}", "编号002");// map.put("${item1.sex}", "男2");// map.put("${item1.age}", "19"); String srcPath = "D:\\temp\\铸造工艺卡.doc"; readwriteWord(srcPath, map); } /** * 实现对word读取和修改操作 * * @param filePath * word模板路径和名称 * @param map * 待填充的数据,从数据库读取 */ public static void readwriteWord(String filePath, Map map) { // 读取word模板 // String fileDir = new // File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath(); FileInputStream in = null; try { in = new FileInputStream(new File(filePath)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } HWPFDocument hdt = null; try { hdt = new HWPFDocument(in); } catch (IOException e1) { e1.printStackTrace(); } Fields fields = hdt.getFields(); Iterator it = fields.getFields(FieldsDocumentPart.MAIN) .iterator(); while (it.hasNext()) { System.out.println(it.next().getType()); } //读取word文本内容 Range range = hdt.getRange(); TableIterator tableIt = new TableIterator(range); //迭代文档中的表格 int ii = 0; while (tableIt.hasNext()) { Table tb = (Table) tableIt.next(); ii++; System.out.println("第"+ii+"个表格数据。

。."); //迭代行,默认从0开始 for (int i = 0; i < tb.numrows();="" i++)="" {="" tablerow="" tr="tb.getRow(i);" 只读前8行,标题部分="" if(i="">=8) break; //迭代列,默认从0开始 for (int j = 0; j < tr.numcells();="" j++)="" {="" tablecell="" td="tr.getCell(j);//取得单元格" 取得单元格的内容="" for(int="" k=""> entry : map.entrySet()) { range.replaceText(entry.getKey(), entry.getValue()); } ByteArrayOutputStream ostream = new ByteArrayOutputStream(); String fileName = "" + System.currentTimeMillis(); fileName += ".doc"; FileOutputStream out = null; try { out = new FileOutputStream("F:/" + fileName, true); } catch (FileNotFoundException e) { e.printStackTrace(); } try { hdt.write(ostream); } catch (IOException e) { e.printStackTrace(); } // 输出字节流 try { out.write(ostream.toByteArray()); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } try { ostream.close(); } catch (IOException e) { e.printStackTrace(); } }}。

二、ueditor如何实现word文档的导入和下载功能

ueditor实现word文档的导入和下载功能的方法:1、UEditor没有提供word的导入功能,只能说是粘贴复制。

2、方案:用poi来提供word导入,思路是将word转换为html输出,再用UEditor提供的setContent()方法将html的内容添加到编辑器中。方案缺点,一是poi对word文本的格式获取必须按setContent()可接受的方式进行;二是我暂时没发现poi可以提供获取段落格式(对齐方式、缩进量)的方法。

代码如下:package demo;import java.io.BufferedWriter; import java.io.ByteArrayOutputStream;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.converter.PicturesManager; import org.apache.poi.hwpf.converter.WordToHtmlConverter; import org.apache.poi.hwpf.usermodel.Picture; import org.apache.poi.hwpf.usermodel.PictureType; import org.w3c.dom.Document; public class Word2Html { public static void main(String argv[]) { String htmlContent = new String(); try { htmlContent = convert2Html("D://test//1.doc","D://test//1.html"); } catch (Exception e) { e.printStackTrace(); } System.out.println(htmlContent); } /** * 将内容写入指定路径下的html文件 * @param content * @param path */ public static void writeFile(String content, String path) { FileOutputStream fos = null; BufferedWriter bw = null; try { File file = new File(path); fos = new FileOutputStream(file); bw = new BufferedWriter(new OutputStreamWriter(fos,"UTF-8")); bw.write(content); } catch (FileNotFoundException fnfe) { fnfe.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } finally { try { if (bw != null) bw.close(); if (fos != null) fos.close(); } catch (IOException ie) { } } } /** * 转换为html * @param fileName * @param outPutFile * @throws TransformerException * @throws IOException * @throws ParserConfigurationException */ public static String convert2Html(String fileName, String outPutFile) throws TransformerException, IOException, ParserConfigurationException { HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(fileName)); //WordToHtmlUtils.loadDoc(new FileInputStream(inputFile)); WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()); wordToHtmlConverter.setPicturesManager(new PicturesManager() { /** * 按建议名称保存图片 */ public String savePicture( byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches ) { return "D:/test/"+suggestedName; } } ); wordToHtmlConverter.processDocument(wordDocument); //save pictures List pics = wordDocument.getPicturesTable().getAllPictures(); if( pics!=null ){ for(int i=0; i。

三、nopi 操作word hwpf在哪个dll中

关键代码如下:

FileInputStream fileInputStream = new FileInputStream( soureFile);

POIFSFileSystem pfs = new POIFSFileSystem( fileInputStream );

HWPFDocument hwpf = new HWPFDocument(pfs);// make a HWPFDocument object

OutputStream output = new FileOutputStream( targetFile );

hwpf.write(output);// write to the target file

output.close();

(2)再word中插入表格。HWPF的情况:

Table tcDataTable = range.insertTableBefore( (short)column , row);//column and row列数和行数

tcDataTable.getRow(i).getCell(j).getParagraph(0).getCharacterRun(0).insertBefore("插入i行j列的内容" );

XWPF的情况:

String outputFile = "D:\\test.doc";

XWPFDocument document = new XWPFDocument();

XWPFTable tableOne = document.createTable();

XWPFTableRow tableOneRowOne = tableOne.getRow(0);

tableOneRowOne.getCell(0).setText("11");

XWPFTableCell cell12 = tableOneRowOne.createCell();

cell12.setText("12");

// tableOneRowOne.addNewTableCell().setText("第1行第2列");

// tableOneRowOne.addNewTableCell().setText("第1行第3列");

// tableOneRowOne.addNewTableCell().setText("第1行第4列");

XWPFTableRow tableOneRowTwo = tableOne.createRow();

tableOneRowTwo.getCell(0).setText("21");

tableOneRowTwo.getCell(1).setText("22");

// tableOneRowTwo.getCell(2).setText("第2行第3列");

XWPFTableRow tableOneRow3 = tableOne.createRow();

tableOneRow3.addNewTableCell().setText("31");

tableOneRow3.addNewTableCell().setText("32");

FileOutputStream fOut;

try {

fOut = new FileOutputStream(outputFile);

document.write(fOut);

fOut.flush();

// 操作结束,关闭文件

fOut.close();

} catch (Exception e) {

e.printStackTrace();

}

四、如何解决POI生成WORD中文乱码问题

[C:\\doc.doc]内容:我是$[name];Word.java-writeWord方法: Java代码 public void writeWord(HttpServletResponse response) { String URL = "C:\\doc.doc"; File file = new File(URL); try { FileInputStream in = new FileInputStream(file); POIFSFileSystem pfs = new POIFSFileSystem(in); HWPFDocument hwpf = new HWPFDocument(pfs); Range range = hwpf.getRange(); String str = range.text(); str = str.replace("$[name]", "黄锋"); System.out.println(str); response.setCharacterEncoding("GB2312"); response.setContentType("application/ms-word"); response.setHeader("Content-disposition", "attachment; filename=1.doc"); PrintWriter out = response.getWriter(); out.println(str); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void writeWord(HttpServletResponse response) { String URL = "C:\\doc.doc"; File file = new File(URL); try { FileInputStream in = new FileInputStream(file); POIFSFileSystem pfs = new POIFSFileSystem(in); HWPFDocument hwpf = new HWPFDocument(pfs); Range range = hwpf.getRange(); String str = range.text(); str = str.replace("$[name]", "黄锋"); System.out.println(str); response.setCharacterEncoding("GB2312"); response.setContentType("application/ms-word"); response.setHeader("Content-disposition", "attachment; filename=1.doc"); PrintWriter out = response.getWriter(); out.println(str); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }。

五、在word中如何打"田字格"

以制做田字格为例 利用“表格与边框”里面的功能设置。

1、先制作一个有很多方格(比如20行,25列)的表格,具体的得试一下看结果是否呈方形再确定多少行和列。 2、再根据“田”字的形状将某些行分次选中,将框线设置为“无边框”。

3、同理,将某些列也设置为无边框。 预览看一下。

是不是很方便,很神奇?! 这里的关键是要掌握表格快捷菜单中的那个像“田”字的按钮和它右边的小小的向下箭头,所有的奥秘都在里边了,当然,还要结合前面的“线型”的有无、粗细、虚实。 如果你掌握了方法,四线格、米字格照此办理。

这个法子是可行的,就是麻烦一点。

六、怎样在word里打田字格

1、打开一个空白的Word文档。

2、选择菜单栏“插入”中的插入表格按钮,插入一个2行2列的表格。

3、选中表格,单击鼠标右键,选择“边框和底纹”选项。

4、把右侧预览处表格内部的实线去掉,去掉的方法就是直接鼠标单击要去掉的实线,并选中红框处标出的虚线。

5、在上一步去掉的内部实线处,以去掉实线相同的方法加上虚线,单击“确定”按钮。

6、还是选中表格,单击鼠标右键,选择“表格属性”选项。

7、在弹出的对话框中作出的设置,共三处,设置完成后,单击“确定”按钮。

8、这样我们就完成了一个田字格。

9、我们可以用复制的方法,粘贴出更多的田字格。

七、WPSG与word有什么区别

它们都是字处理软件,都用于办公。区别:

1、wps是国人开发,使用起来更符合我们中国人的排版习惯,而word是微软的,全世界范围内使通用,有些功能不符合我们的排版习惯

2、个人认为wps中的表格功能很强大,比word的表格功能要全一些,同时更符合我们中国人制作表格的标准。

3、在对对象处理上,各有优劣,这要看你的工作性质来决定是使用哪一个。WPS中的对象功能上比Word要少一些,但WPS中的单行文字可以进行对文字旋转和镜像,而Word不行,无法对对象内的文字进行旋转操作。

八、花火read在哪写文

可根据需求导入对应的jar。

一、HWPFDocument类的使用 用HWPFDocument类将数据写到指定的word文档中,基本思路是这样的: - 首先,建立一个HWPFDocument类的实例,关联到一个临时的word文档; - 然后,通过Range类实例,将数据写入这个word文档中; - 接着,将这个临时的word文档通过write函数写入指定的word文档中。 - 最后,关闭所有资源。

下面详细说明各个步骤。 1.构造函数 这里要说明一下,经过试验,暂时还没找到直接在程序中新建一个word文档并读取的方法,只能先创建好temp.doc,然后在程序中读取。

(用File-createNewFile和POIFSFileSystem.create创建出来的.doc文件,都不能被正确读取) 另外,其实选择哪种参数传入都是一样的,毕竟HWPFDocument关联的word文档是无法写入的,只是当作一个临时文件。所以,选择最为熟悉的InputStream较为合适。

参数1:InputStream。可将word文档用FileInputStream流读取,然后传入HWPFDocument类。

主要用于读取word文档中的数据。 参数2:POIFSFileSystem。

POIFSFileSystem的构造函数参数可以是(File,boolean)【这样的话file必须是已经存在的】,后者为false时可读写。这里可以写为 HWPFDocument doc = new HWPFDocument(new POIFSFileSystem(new File("temp.doc"),false));2.Range类 (1)获取Range类实例。

HWPFDocument类中有一系列获取Range类实例以操作word文档的方法。比较常用的是getRange(),这个方法可以获取涵盖整个文档的范围,但不包括任何页眉和页脚。

Range range = doc.getRange(); 此外,还有获取所有文本范围的getOverallRange()、获取所有文本框的getMainTextboxRange()等等,具体可以根据需求查阅文档。(2)Range类操作word文档 Range类中有大量获取文档数据的方法,若有需要可以查阅文档。

这里只说明与写入数据有关的方法。 1. insertBefore(String),将字符串插入到此range的开头。

返回值类型:CharacterRun 2. insertAfter(String),将字符串插入到此range的结尾。返回值类型:CharacterRun 3. insertTableBefore(short列数, int行数),在此range的开头插入一个指定行列数的表。

返回值类型:Table 4. text(),获取当前range的所有文本。返回值类型:String。

虽然不是写入数据的方法,但是在调试过程中比较好用。3.write方法 HWPFDocument类中的write方法有三种重载形式:(实际上可以理解为writeTo) 参数1:空参数。

将本对象关联的word文档写入另一个打开的可写的POIFSFileSystem文件中。 参数2:File。

将本对象关联的word文档写入指定的文件(newFile)中。如果该文件不存在,则创建;若存在,则覆盖。

参数3:OutputStream。将本对象关联的word文档写入指定的字节输出流中。

可以根据需求选择,但是最好还是选择OutputStream,因为输出流的操作空间更大。参数2的newFile不能续写,只能覆盖。

可以将其直接写入目标文件的输出流,也可以先写入一个字节数组输出流,在通过字节数组输出流写入到目标文件输出流中。4.关闭资源 - 关闭doc.close();,也即是关闭doc所使用的资源”temp.doc” - 关闭将数据写入指定word文档的输出流 二、代码示例 复制代码 三、调试记录 1.关于创建临时temp.doc的尝试 目的:在程序开始时创建一个temp.doc,程序结束后删除。

尝试1:用File-createNewFile创建出文件,然后用POIFSFileSystem构造函数打开这个文件, 然后用HWPFDocument关联到这个POIFSFileSystem类实例。 结果:org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long)。

创建出的文件是0字节空文件,不能被POIFSFileSystem打开。尝试2:用POIFSFileSystem.create(file)静态函数创建POIFSFileSystem实例,然后用 HWPFDocument关联。

结果:java.io.FileNotFoundException: no such entry: “WordDocument”, had: []。文件 是创建成功了,也用POIFSFileSystem成功载入,但是HWPFDocument无法接收这个参数。

结论:目前只能用Office软件创建的word文档才行。也就是说暂时还没找到直接在程序中新建 一个word文档的方法,只能先创建好temp.doc,然后在程序中读取。

2.无法写入temp.doc 描述:用doc.getRange()方法获取文件的整个范围,然后用range.insertAfter(String)方法 插入数据。编译运行没有任何异常,但是打开文件发现还是原样。

尝试:插入数据后用range.text()获取当前range的所有文本并显示在控制台上,发现数据的 确是成功插入到了range中,但是temp.doc依然没有任何变化。猜测:可能是文件读取到HWPFDocument的方式不对,只读不可写入。

也有可能是range中的内容并不会改变.doc的内容,必须doc.write(*)写入到另一个文件中才 行。 尝试:通过各种方式(inputstream,poifsfilesystem,(poifs,readonly))载入temp.doc,结 果都是一样。

于是开始尝试第二种猜测。3.加入doc.write(*)方法后,运行报错,找不到需要的类文件(编译正常)。

详情:只加了这一句话,这句话报错:doc.write(out):java.lang.NoClassDefFoundError错 误 分析:。

转载请注明出处51数据库 » hwpfdocumentword

软件
前端设计
程序设计
Java相关