Java 实现word 中写入文字图片的解决方案

合集下载

JAVA不使用POI给Word文档添加水印[PageOffice]

JAVA不使用POI给Word文档添加水印[PageOffice]

JAVA不使用POI给Word文档添加水印[PageOffice]程序员在开发项目时,经常需要给一些图片、文件添加水印,但往往代码编写复杂,只能是先将文件上传再调用Graphics类才能实现这一功能。

但是最无奈的是这个类只能给图片添加水印,而无法通过程序给Word文件添加水印,那如何实现这一功能呢,下面我就来和大家分享一下一种简单的实现方法吧。

第一步:拷贝文件到WEB项目的“WEB-INF/lib”目录下。

拷贝PageOffice 示例中下的“WEB-INF/lib”路径中的pageoffice.cab和pageoffice.jar到新建项目的“WEB-INF/lib”目录下。

第二步:修改WEB项目的配置文件。

将如下代码添加到配置文件中:<!-- PageOffice Begin --><servlet><servlet-name>poserver</servlet-name><servlet-class>com.zhuozhengsoft .pageoffice.poserver.Server</servlet-class></servlet><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/poserver.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/pageoffice.cab</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/popdf.cab</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/sealsetup.exe</url-pattern></servlet-mapping><servlet><servlet-name>adminseal</servlet-name><servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal </servlet-class></servlet><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/adminseal.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/loginseal.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/sealimage.do</url-pattern></servlet-mapping><mime-mapping><extension>mht</extension><mime-type>message/rfc822</mime-type></mime-mapping><context-param><param-name>adminseal-password</param-name><param-value>123456</param-value></context-param><!-- PageOffice End -->第三步:添加引用。

java根据模板生成word文档,兼容富文本、图片

java根据模板生成word文档,兼容富文本、图片

java根据模板⽣成word⽂档,兼容富⽂本、图⽚Java⾃动⽣成带图⽚、富⽂本、表格等的word⽂档使⽤技术 freemark+jsoup ⽣成mht格式的伪word⽂档,已经应⽤项⽬中,确实是可⾏的,⽆论是富⽂本中是图⽚还是表格,都能在word中展现出来使⽤jsoup解析富⽂本框,将其中的图⽚进⾏Base64位转码,使⽤freemark替换模板的占位符,将变量以及图⽚资源放⼊模板中在输出⽂件maven地址<!--freemarker--><!--<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version></dependency><!--JavaHTMLParser--><!--<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.2</version></dependency>制作word的freemark模板1. 先将wrod的格式内容定义好,如果需要插⼊参数的地⽅以${xxx}为表⽰,例:${product}模板例⼦: 2. 将模板另存为mht格式的⽂件,打开该⽂件检查每个变量(${product})是否完整,有可能在${}中出现其他代码,需要删除。

3. 将mht⽂件变更⽂件类型,改成ftl为结尾的⽂件,引⼊到项⽬中 4. 修改ftl模板⽂件,在⽂件中加上图⽚资源占位符${imagesBase64String},${imagesXmlHrefString}具体位置如下图所⽰: 5. ftl⽂件中由⼏个关键配置需要引⼊到代码中:docSrcParent = word.filesdocSrcLocationPrex =nextPartId = 01D2C8DD.BC13AF60上⾯三个参数,在模板⽂件中可以找到,需要进⾏配置,如果配置错误,图⽚⽂件将不会显⽰下⾯这三个参数固定,切换模板也不会改变shapeidPrex = _x56fe__x7247__x0020typeid = #_x0000_t75spidPrex = _x0000_i 6. 模板引⼊之后进⾏代码编辑源码地址为:下载源码后需要进⾏调整下内容:1. 录⼊步骤5中的6个参数2. 修改freemark获取模板⽅式下⾯这种⽅式能获取模板,但是在项⽬打包之后⽆法获取jar包内的⽂件Configuration configuration=newConfiguration(Configuration.getVersion());configuration.setDefaultEncoding(StandardCharsets.UTF_8.toString());configuration.setDirectoryForTemplateLoading(newFile(templatePath));Template template=configuration.getTemplate("xxx.ftl");通过流的形式直接创建模板对象Configuration configuration=newConfiguration(Configuration.getVersion());configuration.setDefaultEncoding(StandardCharsets.UTF_8.toString());configuration.setDirectoryForTemplateLoading(newFile(templatePath));InputStream inputStream=newFileInputStream(newFile(templatePath+"/"+templateName)); InputStreamReader inputStreamReader=newInputStreamReader(inputStream,StandardCharsets.UTF_8); Template template=newTemplate(templateName,inputStreamReader,configuration);。

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模板中填充数据(总结)

[原创]java向word模板中填充数据(总结) 使⽤过PageOffice动态⽣成word⽂档的⼈都知道,PageOffice可以给word⽂档的指定位置进⾏填充,这⾥我们所说的指定位置在PageOffice的专业术语⾥⾯有两个概念,⼀个叫做数据区域(DataRegion),另⼀个叫做数据标签(DataTag)。

⼀、概念 数据区域:是Word⽂档中具有 "PO_" 前缀命名的书签所定位的⽂档区域。

简单来说,数据区域就是⼀种特殊的Word书签对象,便于定位Word⽂档中的内容。

数据标签:是任意的有效字符组成的特殊样式的字符串(如“【时间】”、“{姓名}”、“${name}”等等)作为标记,理论上这样的字符串(⽐如:“性别”、“地址”、“aa”、“bbcc”)也可以当做数据标签,但是不推荐使⽤,因为这样的标签不能从视觉上直观的看出word⽂档中包含了哪些数据标签。

⼆、使⽤ 数据区域⾥⾯可以填充些的内容:⽂本、图⽚、Word⽂件、Excel⽂件。

WordDocument doc = new WordDocument();//填充⽂本DataRegion dataRegion1 = doc.openDataRegion("PO_userName");dataRegion1.setValue("张三");//还可以给填充的⽂本设置字体,颜⾊,粗体等样式dataRegion1.getFont().setColor(Color.blue);dataRegion1.getFont().setSize(24);dataRegion1.getFont().setName("⾪书");dataRegion1.getFont().setBold(true);//填充图⽚doc.openDataRegion("PO_deptName").setValue("[image]img/123.jpg[/image]");//填充word⽂件doc.openDataRegion("PO_deptName").setValue("[word]doc/aabb.doc[/word]");//填充excel⽂件doc.openDataRegion("PO_deptName").setValue("[excel]doc/bbcc.xls[/excel]"); 数据标签中可以填充的内容:⽂本。

Java在Word中创建邮件合并模板并合并文本和图片的操作方法

Java在Word中创建邮件合并模板并合并文本和图片的操作方法

Java在Word中创建邮件合并模板并合并⽂本和图⽚的操作⽅法Word⾥⾯的邮件合并功能是⼀种可以快速批量操作同类型数据的⽅式,常见的如数据填充、打印等。

其中必不可少的步骤包括⽤于填充的模板⽂档、填充的数据源以及实现邮件合并的功能。

下⾯,通过Java程序展⽰如何来实现创建模板,并通过邮件合并功能来合并⽂本数据和图⽚数据的⽅法,分别以2个⽰例来展⽰,即:1. 创建Word填充模板2. 邮件合并⽂本和图⽚本次程序运⾏环境如下:代码编译⼯具:IDEAJdk版本:1.8.0Word测试⽂档:.docx 2013Word jar包⼯具:Free Spire.Doc for Java关于jar导⼊:下载Free Spire.Doc for Java 到本地后,解压。

然后执⾏如下步骤⼿动导⼊jar到Java程序:Project Structure(Shift+Ctrl+Alt+S)打开的界⾯中选择【Modules】—【Dependencies】,点击“+”,【JARs or directories…】,选择本地路径中的jar⽂件,添加后,勾选,点击“OK”。

完成导⼊。

Java代码⽰例1. 创建Word邮件合并模板import com.spire.doc.*;import com.spire.doc.documents.Paragraph;public class CreateTemplate {public static void main(String[] args) {//创建Document实例Document document = new Document();document.loadFromFile("test.docx");//获取第⼀节Section section = document.getSections().get(0);//添加4个段落Paragraph para1 = section.addParagraph();Paragraph para2 = section.addParagraph();Paragraph para3 = section.addParagraph();Paragraph para4 = section.addParagraph();//添加合并域,包括⽂字域、图⽚域para1.setText("姓名 : ");para1.appendField("Name", FieldType.Field_Merge_Field);para2.setText("邮件地址: ");para2.appendField("Email Address", FieldType.Field_Merge_Field);para3.setText("⽇期 : ");para3.appendField("Date", FieldType.Field_Merge_Field);para4.setText("图⽚:");para4.appendField("Image:image",FieldType.Field_Merge_Field);//保存模板⽂档document.saveToFile("template.docx", FileFormat.Docx);document.dispose();}}模板效果:2. 邮件合并⽂本和图⽚数据以上⾯创建模板为例,填充⽂本数据及图⽚数据import com.spire.doc.*;import com.spire.doc.reporting.MergeImageFieldEventArgs;import com.spire.doc.reporting.MergeImageFieldEventHandler;import java.text.SimpleDateFormat;import java.util.Date;public class MailMerge {public static void main(String[] args) throws Exception{//创建Document实例,并加载邮件合并模板⽂档Document document = new Document();document.loadFromFile("template.docx");//按⽂本合并域名称,设置合并域的⽂本值Date currentTime = new Date();SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString = formatter.format(currentTime);String[] textFieldNames = new String[]{"Name", "Email Address", "Date"};String[] textFieldValues = new String[]{"亚当斯密","**************",dateString};//合并⽂本到模板document.getMailMerge().execute(textFieldNames,textFieldValues );//按图⽚合并域名称,设置图⽚路径值String[] imageFieldNames = new String[]{"image"};String[] imageFieldValues = new String[]{"logo.jpg"};//调⽤邮件合并事件加载图⽚document.getMailMerge().MergeImageField = new MergeImageFieldEventHandler(){public void invoke(Object sender, MergeImageFieldEventArgs args){mailMerge_MergeImageField(sender, args);}};//执⾏邮件合并document.getMailMerge().execute(imageFieldNames, imageFieldValues);//保存⽂档document.saveToFile("result.docx", FileFormat.Docx);}//创建邮件合并事件⽤于加载图⽚private static void mailMerge_MergeImageField(Object sender, MergeImageFieldEventArgs field) { String filePath = (String) field.getFieldValue();if (!filePath.isEmpty()){field.setImage(filePath);}}}合并效果:到此这篇关于Java 在Word中创建邮件合并模板并合并⽂本和图⽚的⽂章就介绍到这了,更多相关java创建邮件合并模板内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

Java 添加、修改、回复、删除Word批注

Java 添加、修改、回复、删除Word批注

Java 添加、回复、修改(替换)、删除、读取Word批注批注是一种常用于对特定文档内容进行注解的工具或方法,起到解释说明、标记指正的作用。

在本篇文章中,将介绍如何操作Word批注的方法,包括:1. 添加批注:添加文本到批注、插入图片到批注;1.1 给指定段落添加批注1.2 给指定字符串添加批注2. 回复批注;3. 修改或替换批注:用文本替换批注中的文本内容、用文本替换批注中的图片、用图片替换批注中的图片;4. 删除批注:删除指定批注中的所有内容、删除指定批注中的指定内容5. 读取批注5.1 读取批注中的文本5.2 读取批注中的图片使用工具:Free Spire.Doc for Java (免费版)Jar文件获取及导入:方法1:通过官网获取jar包,并解压。

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

方法2:通过添加maven依赖导入到maven项目,参考导入步骤。

Java示例代码【示例1】给段落添加批注(文本、图片)import com.spire.doc.*;import com.spire.doc.documents.Paragraph;import ment;public class AddComment {public static void main(String[] args) {//加载测试文档Document doc = new Document("test.docx");//获取指定段落Section sec = doc.getSections().get(0);Paragraph para= sec.getParagraphs().get(3);//插入文本到批注Comment comment = para.appendComment("请在试验中将包含以下特征的实验样本记录在册,并整理好周记录报表,供后续观察取样。

documentbuilder insertimage 用法

documentbuilder insertimage 用法在DocumentBuilder中,insertImage()方法用于在Word文档中插入图片。

它的用法如下:1. 创建一个DocumentBuilder对象,可以通过Document对象的createDocumentBuilder()方法获取。

```javaDocumentBuilder builder = document.createDocumentBuilder(); ```2. 使用insertImage()方法插入图片,该方法有两个重载形式: 1) insertImage(InputStream inputStream)该方法接受一个InputStream参数,用于读取图片数据。

以下是一个示例:```javaInputStream imageStream = newFileInputStream("path/to/image.jpg");builder.insertImage(imageStream);```2) insertImage(File imageFile)该方法接受一个File参数,用于指定图片文件。

以下是一个示例:```javaFile imageFile = new File("path/to/image.jpg");builder.insertImage(imageFile);```3. 可选:可以通过其他方法对插入的图片进行调整,例如设置图片大小、位置等。

以下是一些常用的调整方法:```javabuilder.setAutoFit(ImageAutoFit.CONTROL);builder.setWidth(400);builder.setHeight(300);builder.setWrapType(WrapType.INLINE);```4. 最后,通过Document对象的save()方法保存文档。

Java利用poi对word插入文字图片

Java利用poi对word插入文字图片文档末尾rar压缩包内,完整的Java project demo,包含所需的所有jar包,示例文件,使用说明等。

三步实现:一、package com.word.poi;import java.io.IOException;import java.io.InputStream;import org.apache.poi.openxml4j.opc.OPCPackage;import ermodel.XWPFDocument;import ermodel.XWPFParagraph;import org.apache.xmlbeans.XmlException;import org.apache.xmlbeans.XmlToken;importorg.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; importorg.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;/********************************************************* 类名:CustomXWPFDocument* 功能:XWPFDocument读写word.docx* 作者:qiucx 2017年4月12日* 修改记录:* 日期修改人修改说明********************************************************/public class CustomXWPFDocument extends XWPFDocument { public CustomXWPFDocument(InputStream in) throws IOException { super(in);}public CustomXWPFDocument() {super();}public CustomXWPFDocument(OPCPackage pkg) throws IOException { super(pkg);}/********************************************************* 函数名: createPicture* 功能 : 在word中标记的位置生成指定路径的图片* 作者 : qiucx 2017年4月12日* 参数表: @param id* 参数表: @param width 设置图片宽度* 参数表: @param height 设置图片高度* 参数表: @param paragraph 段落参数* 返回值: void* 修改记录:* 日期修改人修改说明********************************************************/public void createPicture(int id, int width, int height,XWPFParagraph paragraph) {final int EMU = 9525;width *= EMU;height *= EMU;System.out.println("getAllPictures---" + getAllPictures().size());String blipId = getAllPictures().get(id).getPackageRelationship().getId();CTInline inline = paragraph.createRun().getCTR().addNewDrawing().addNewInline();String picXml = ""+ "<a:graphicxmlns:a=\"/drawingml/2006/main\">"+ "<a:graphicData uri=\"/drawingml/2006/picture\">"+ "<pic:pic xmlns:pic=\"/drawingml/2006/picture\">"+ "<pic:nvPicPr>" + "<pic:cNvPr id=\""+ id+ "\" name=\"Generated\"/>"+ "<pic:cNvPicPr/>"+ "</pic:nvPicPr>"+ "<pic:blipFill>"+ "<a:blip r:embed=\""+ blipId+ "\" xmlns:r=\"/officeDocument/2006/relationships \"/>"+ "<a:stretch>"+ "<a:fillRect/>"+ "</a:stretch>"+ "</pic:blipFill>"+ "<pic:spPr>"+ "<a:xfrm>"+ "<a:off x=\"0\" y=\"0\"/>"+ "<a:ext cx=\""+ width+ "\" cy=\""+ height+ "\"/>"+ "</a:xfrm>"+ "<a:prstGeom prst=\"rect\">"+ "<a:avLst/>"+ "</a:prstGeom>"+ "</pic:spPr>"+ "</pic:pic>"+ "</a:graphicData>" + "</a:graphic>";inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null;try {xmlToken = XmlToken.Factory.parse(picXml); } catch (XmlException xe) {xe.printStackTrace();}inline.set(xmlToken);inline.setDistT(0);inline.setDistB(0);inline.setDistL(0);inline.setDistR(0);CTPositiveSize2D extent = inline.addNewExtent();extent.setCx(width);extent.setCy(height);CTNonVisualDrawingProps docPr = inline.addNewDocPr();docPr.setId(id);docPr.setName("图片" + id);docPr.setDescr("测试");}}二、package com.word.poi;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.poi.POIXMLDocument;import org.apache.poi.openxml4j.opc.OPCPackage; import ermodel.XWPFParagraph; import ermodel.XWPFRun; import ermodel.XWPFT able; import ermodel.XWPFT ableCell; import ermodel.XWPFT ableRow;/******************************************************** * 类名:WordUtil* 功能:POI Word读取编辑工具类* 作者:qiucx 2017年4月12日* 修改记录:* 日期修改人修改说明********************************************************/public class WordUtil {/********************************************************* 函数名: generateWord* 功能 : 通用功能处理* 作者 : qiucx 2017年4月12日* 参数表: @param param* 参数表: @param template* 参数表: @return* 返回值: CustomXWPFDocument* 修改记录:* 日期修改人修改说明********************************************************/public static CustomXWPFDocument generateWord(Map<String, Object> param, String template) {CustomXWPFDocument doc = null;try {OPCPackage pack = POIXMLDocument.openPackage(template);doc = new CustomXWPFDocument(pack);if (param != null && param.size() > 0) {//处理段落List<XWPFParagraph> paragraphList = doc.getParagraphs();processParagraphs(paragraphList, param, doc);//处理表格Iterator<XWPFTable> it = doc.getTablesIterator();while (it.hasNext()) {XWPFT able table = it.next();List<XWPFTableRow> rows = table.getRows();for (XWPFTableRow row : rows) {List<XWPFTableCell> cells = row.getT ableCells();for (XWPFTableCell cell : cells) {List<XWPFParagraph> paragraphListT able = cell.getParagraphs();processParagraphs(paragraphListT able, param, doc);}}}}} catch (Exception e) {e.printStackTrace();}return doc;}/********************************************************* 函数名: processParagraphs* 功能 : 处理段落* 作者 : qiucx 2017年4月12日* 参数表: @param paragraphList* 参数表: @param param* 参数表: @param doc* 返回值: void* 修改记录:* 日期修改人修改说明********************************************************/public static void processParagraphs(List<XWPFParagraph> paragraphList,Map<String, Object> param,CustomXWPFDocument doc){ if(paragraphList != null && paragraphList.size() > 0){for(XWPFParagraph paragraph:paragraphList){List<XWPFRun> runs = paragraph.getRuns();for (XWPFRun run : runs) {String text = run.getText(0);if(text != null){boolean isSetText = false;for (Entry<String, Object> entry : param.entrySet()) {String key = entry.getKey();if(text.indexOf(key) != -1){isSetText = true;Object value = entry.getValue();if (value instanceof String) {//文本替换text = text.replace(key, value.toString());} else if (value instanceof Map) {//图片替换text = text.replace(key, "");Map pic = (Map)value;int width = Integer.parseInt(pic.get("width").toString());int height = Integer.parseInt(pic.get("height").toString());int picType = getPictureType(pic.get("type").toString());byte[] byteArray = (byte[]) pic.get("content");ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteArray);try {int ind = doc.addPicture(byteInputStream,picType);System.out.println(ind+"------------");doc.createPicture(ind, width , height,paragraph);} catch (Exception e) {e.printStackTrace();}}}}if(isSetText){run.setText(text,0);}}}}}}/********************************************************* 函数名: getPictureType* 功能 : 根据图片类型,取得对应的图片类型代码* 作者 : qiucx 2017年4月12日* 参数表: @param picType* 参数表: @return* 返回值: int* 修改记录:* 日期修改人修改说明********************************************************/ private static int getPictureType(String picType){int res = CustomXWPFDocument.PICTURE_TYPE_PICT;if(picType != null){if(picType.equalsIgnoreCase("png")){res = CustomXWPFDocument.PICTURE_TYPE_PNG;}else if(picType.equalsIgnoreCase("dib")){res = CustomXWPFDocument.PICTURE_TYPE_DIB;}else if(picType.equalsIgnoreCase("emf")){res = CustomXWPFDocument.PICTURE_TYPE_EMF;}else if(picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")){res = CustomXWPFDocument.PICTURE_TYPE_JPEG;}else if(picType.equalsIgnoreCase("wmf")){res = CustomXWPFDocument.PICTURE_TYPE_WMF;}}return res;}/********************************************************* 函数名: inputStream2ByteArray* 功能 : 将输入流中的数据写入字节数组* 作者 : qiucx 2017年4月12日* 参数表: @param in* 参数表: @param isClose* 参数表: @return* 返回值: byte[]* 修改记录:* 日期修改人修改说明********************************************************/public static byte[] inputStream2ByteArray(InputStream in,boolean isClose){ byte[] byteArray = null;try {int total = in.available();byteArray = new byte[total];in.read(byteArray);} catch (IOException e) {e.printStackTrace();}finally{if(isClose){try {in.close();} catch (Exception e2) {System.out.println("关闭流失败");}}}return byteArray;}}三、package com.word.poi;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.Date;import java.util.HashMap;import java.util.Map;/********************************************************* 类名:Test* 功能:测试类指定一些标记的参数,图片路径,文件模板位置,文件输出位置* 作者:qiucx 2017年4月12日* 修改记录:* 日期修改人修改说明********************************************************/public class Test {//指定一些标记的参数,图片路径,文件模板位置,文件输出位置public static void main(String[] args) throws Exception {//文字标记Map<String, Object> param = new HashMap<String, Object>();param.put("${name}", "qiucx");param.put("${zhuanye}", "计算机科学与技术");param.put("${sex}", "男");param.put("${school_name}", "福建农林大学");param.put("${date}", new Date().toString());//图片标记,路径,宽高Map<String,Object> header = new HashMap<String, Object>();header.put("width", 150);header.put("height", 150);header.put("type", "jpg");header.put("content", WordUtil.inputStream2ByteArray(new FileInputStream("D:\\icon\\smile.jpg"), true));param.put("${header}",header);//原文件CustomXWPFDocument doc = WordUtil.generateWord(param, "D:\\icon\\tess.docx");//输出文件FileOutputStream fopts = new FileOutputStream("D:\\icon\\tess2.docx");doc.write(fopts);fopts.close();}}原文件模板样式:输出文件示例:附件:poi_word_demo.rar。

java读写word文档 完美解决方案

java读写word文档完美解决方案Java读写Word文档:完美解决方案Word文档是一种广泛使用的文件格式,用于创建和编辑文本文档。

在Java编程中,读写Word文档是一个常见的需求。

本文将介绍一种完美解决方案,帮助您在Java中实现对Word文档的读写操作。

一、引入依赖要在Java中读写Word文档,我们需要使用Apache POI库。

Apache POI是一个Java类库,可用于读取和编写Microsoft Office文件格式,包括Word文档。

在您的Java项目中,您需要将以下依赖项添加到您的构建文件中,以便使用Apache POI库:```java<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>```二、读取Word文档要读取一个Word文档,您可以使用Apache POI提供的XWPFDocument类。

以下是一个简单的示例代码,演示如何使用XWPFDocument读取Word文档:```javaimport ermodel.XWPFDocument;import org.apache.poi.xwpf.extractor.XWPFWordExtractor;import java.io.FileInputStream;import java.io.IOException;public class ReadWordDocument {public static void main(String[] args) {try {FileInputStream fis = newFileInputStream("path/to/your/word/document.docx");XWPFDocument document = new XWPFDocument(fis);XWPFWordExtractor extractor = new XWPFWordExtractor(document);String content = extractor.getText();System.out.println(content);fis.close();} catch (IOException e) {e.printStackTrace();}}}```在上面的代码中,您需要将"path/to/your/word/document.docx"替换为您实际的Word文档路径。

Java 添加、删除Word水印

Java 添加、删除Word水印水印是一种常用于各种文档的声明、防伪手段,一般可设置文字水印或者加载图片作为水印。

以下内容将分享通过Java编程给Word文档添加水印效果的方法,以及如何将Word文档中已有的水印效果删除。

使用工具:Free Spire.Doc for Java 2.0.0(免费版)Jar导入:方法1:通过官网下载控件包。

在程序下新建一个directory目录,并命名(本示例中命名为lib);将控件包lib文件夹下的jar(如下图1)复制到程序中新建的目录下。

复制jar文件后,鼠标右键点击jar文件,选择”A dd as Library”。

完成导入(如下图2)。

图1:图2:方法2:通过maven导入。

参考导入方法。

Java代码示例(供参考)【示例1】添加文本水印import com.spire.doc.*;import com.spire.doc.documents.WatermarkLayout; import java.awt.*;public class Main {public static void main(String[] args) { //加载测试文档Document document = new Document();document.loadFromFile("sample.docx");//插入水印InsertTextWatermark(document.getSections().get(0));//保存文档document.saveToFile("textwatermark.docx",FileFormat.Docx ); }//自定义方法用于指定文本水印字样及格式化操作private static void InsertTextWatermark(Section section){TextWatermark txtWatermark = new TextWatermark();txtWatermark.setText("内部使用");txtWatermark.setFontSize(40);txtWatermark.setColor(Color.red);txtWatermark.setLayout(WatermarkLayout.Diagonal);section.getDocument().setWatermark(txtWatermark);}文本水印效果:【示例2】添加图片水印import com.spire.doc.*;public class Main {public static void main(String[] args) {//加载测试文档Document document = new Document();document.loadFromFile("sample.docx");//加载图片设置为水印PictureWatermark picture = new PictureWatermark();picture.setPicture("wx.png");picture.setScaling(5);picture.isWashout(false);document.setWatermark(picture);//保存文档document.saveToFile("imagewatermark.docx",FileFormat.Docx ); }}图片水印效果:【示例3】删除Word水印import com.spire.doc.*;public class DeleteWatermark {public static void main(String[] args){//加载含有水印的Word文档Document doc = new Document("test.docx");//调用方法setWatermark()设置为null,去掉水印效果doc.setWatermark(null);//保存文档doc.saveToFile("result.docx",FileFormat.Docx_2010); }}运行程序后,水印效果将被删除。

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

Java 实现word 中写入文字图片的解决方案
JAVA生成WORD文件的方法目前有以下两种方式: 一种是jacob 但是局限于windows平台往往许多JAVA程序运行于其他操作系统在此不讨论该方案;
一种是poi但是他的excel处理很程序word模块还局限于读取word的文本内容,写word文件就更弱项了.
用到的jar包:
iText-2.1.5.jar
iText-rtf-2.1.4.jar
iTextAsian.jar
&lt;!-- https:///artifact/com.lowagie/itext --&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.lowagie&lt;/groupId&gt;
&lt;artifactId&gt;itext&lt;/artifactId&gt;
&lt;version&gt;2.1.5&lt;/version&gt;
&lt;/dependency&gt;
&lt;!--
https:///artifact/com.lowagie/itext-rtf
--&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.lowagie&lt;/groupId&gt;
&lt;artifactId&gt;itext-rtf&lt;/artifactId&gt;
&lt;version&gt;2.1.4&lt;/version&gt;
&lt;/dependency&gt;
&lt;!--
https:///artifact/com.itextpdf/itext-asian --&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.itextpdf&lt;/groupId&gt;
&lt;artifactId&gt;itext-asian&lt;/artifactId&gt;
&lt;version&gt;5.2.0&lt;/version&gt;
&lt;/dependency&gt;
/**
* 创建word文档步骤:
* 1,建立文档
* 2,创建一个书写器
* 3,打开文档
* 4,向文档中写入数据
* 5,关闭文档
*/
/**
*
* @Description: 将网页内容导出为word
* @param @param file
* @param @throws DocumentException
* @param @throws IOException 设定文件
* @return void 返回类型
* @throws
*/
public static String exportDoc() throws DocumentException, IOException {
// 设置纸张大小
Document document = new
Document(PageSize.A4);
// 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
File file = new File("D://report.doc");
RtfWriter2.getInstance(document, new FileOutputStream(file));
document.open();
// 设置中文字体
BaseFont bfChinese =
BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
// 标题字体风格
Font titleFont = new Font(bfChinese, 12, Font.BOLD);
// // 正文字体风格
//
Font contextFont = new Font(bfChinese, 10, Font.NORMAL);
Paragraph title = new Paragraph("统计报告");
//
// 设置标题格式对齐方式
title.setAlignment(Element.ALIGN_CENTER);
// title.setFont(titleFont);
document.add(title);
String contextString = "iText是一个能够快速产生PDF文件的java类库。

"
+ " \n"// 换行+ "iText的java类对于那些要产生包含文本,"
+ "表格,图形的只读文档是很有用的。

它的类库尤其与java Servlet有很好的给合。

"
+ "使用iText与PDF能够使你正确的控制Servlet的输出。

";
Paragraph context = new
Paragraph(contextString);
// 正文格式左对齐
context.setAlignment(Element.ALIGN_LEFT);
// context.setFont(contextFont);
// 离上一段落(标题)空的行数
context.setSpacingBefore(5);
// 设置第一行空的列数
context.setFirstLineIndent(20);
document.add(context);
//
// // 利用类FontFactory结合Font和Color可以设置各种各样字体样式
//
// Paragraph underline = new Paragraph("下划线的实现", FontFactory.getFont(
// FontFactory.HELVETICA_BOLDOBLIQUE, 18, Font.UNDERLINE,
// new Color(0, 0, 255)));
//
// document.add(underline);
//
// // 添加图片Image.getInstance即可以放路径又可以放二进制字节流
//
Image img =
Image.getInstance("D:\\eclipseWorkspace\\wordTest\\010 55378_0.jpg");
img.setAbsolutePosition(0, 0);
img.setAlignment(Image.LEFT);// 设置图片显示位置
//
// img.scaleAbsolute(60, 60);// 直接设定显示尺寸
//
// // img.scalePercent(50);//表示显示的大小为原尺寸的50%
//
// // img.scalePercent(25, 12);//图像高宽的显示比例
//
// // img.setRotation(30);//图像旋转一定角度
//
document.add(img);
document.close();
// 得到输入流
// wordFile = new
ByteArrayInputStream(baos.toByteArray());
// baos.close();
return "";
}。

相关文档
最新文档