- 浏览: 324927 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ajax忘了跳转:
谢谢分享,基于你的思路。我改良了一版,可供参考public s ...
一个整数的所有最小因子 -
baobaodehao1991:
楼主,合并多列,单元格内容并不能居中,选中合并的单元格,除了前 ...
把table表格内容导出为excel -
lbaaixy:
楼主,小弟最近也在弄这个东西。有点小问题java.lang.C ...
flex + red5实现视频会议 -
weilikk:
好像只能替换整行,如果是一行中有其他数据,只替换行中某个位置就 ...
poi替换模板标签为图片 -
chinaxiaofeng8:
在吗,兄弟,你那个代码怎么运行看效果的
flex + red5实现视频会议
在问答频道看到有人求poi模板替换图片的需求,百度一下,网上没有合适的方案,一时手痒,自己动手写了一个。本文参考了http://www.it165.net/pro/html/201108/451.html的方法,进行了部分修改,可以替换word2007的表格中的标签为图片,先看效果:
,再看代码
,
我用的 poi-3.7-20101029.jar,换下你的poi版本
,再看代码
package com.chinahrt.zyn.iteye; import java.io.IOException; import java.io.InputStream; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlToken; import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; /** * @author * */ public class CustomXWPFDocument extends XWPFDocument { public CustomXWPFDocument(InputStream in) throws IOException { super(in); } /** * */ public CustomXWPFDocument() { super(); // TODO Auto-generated constructor stub } /** * @param pkg * @throws IOException */ public CustomXWPFDocument(OPCPackage pkg) throws IOException { super(pkg); // TODO Auto-generated constructor stub } public void createPicture(int id, int width, int height,XWPFParagraph paragraph) { final int EMU = 9525; width *= EMU; height *= EMU; String blipId = getAllPictures().get(id).getPackageRelationship() .getId(); /* CTInline inline = createParagraph().createRun().getCTR() .addNewDrawing().addNewInline(); */ CTInline inline = paragraph.createRun().getCTR() .addNewDrawing().addNewInline(); String picXml = "" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + id + "\" name=\"Generated\"/>" + " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>" + " <a:blip r:embed=\"" + blipId + "\" xmlns:r=\"http://schemas.openxmlformats.org/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>"; // CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData(); XmlToken xmlToken = null; try { xmlToken = XmlToken.Factory.parse(picXml); } catch (XmlException xe) { xe.printStackTrace(); } inline.set(xmlToken); // graphicData.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.chinahrt.zyn.iteye; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Iterator; import java.util.List; import org.apache.poi.POIXMLDocument; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; public class POIWordTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try{ OPCPackage pack = POIXMLDocument.openPackage("d:/img.docx"); // XWPFDocument doc = new XWPFDocument(pack); CustomXWPFDocument doc = new CustomXWPFDocument(pack); File pic = new File("d:/2000.png"); FileInputStream is = new FileInputStream(pic); Iterator<XWPFTable> it = doc.getTablesIterator(); while(it.hasNext()){ XWPFTable table = it.next(); List<XWPFTableRow> rows = table.getRows(); for(XWPFTableRow row:rows){ List<XWPFTableCell> cells = row.getTableCells(); for(XWPFTableCell cell:cells){ if(cell.getText().endsWith("${img}")){ cell.removeParagraph(0); // cell.setText("aa"); XWPFParagraph pargraph = cell.addParagraph(); //100为宽,150为高 int ind = doc.addPicture(is, doc.PICTURE_TYPE_PNG); doc.createPicture(ind, 100, 150,pargraph); } List<XWPFParagraph> pars = cell.getParagraphs(); for(XWPFParagraph par:pars){ List<XWPFRun> runs = par.getRuns(); for(XWPFRun run:runs){ run.removeBreak(); } } } } } FileOutputStream fos = new FileOutputStream("d:/img_copy.docx"); doc.write(fos); fos.flush(); fos.close(); }catch(Exception e){ e.printStackTrace(); } } }
评论
5 楼
weilikk
2017-06-12
好像只能替换整行,如果是一行中有其他数据,只替换行中某个位置就不行啊
4 楼
zyn010101
2014-11-21
zykai029 写道
doc.addPicture(is, doc.PICTURE_TYPE_PNG);
这方法在哪
这方法在哪
我用的 poi-3.7-20101029.jar,换下你的poi版本
3 楼
zykai029
2014-10-22
doc.addPicture(is, doc.PICTURE_TYPE_PNG);
这方法在哪
这方法在哪
2 楼
zykai029
2014-10-22
doc.addPicture(is, doc.PICTURE_TYPE_PNG);
1 楼
tianyi1
2014-08-26
设置图片的版式可以处理吗,
发表评论
-
仿微信9宫格群组头像
2015-07-14 20:27 13392开发了一个聊天工具,群组头像像仿照微信的头像那样显示成员头像合 ... -
汉字转拼音
2015-06-18 13:44 1077/* * Copyright (C) 2011 The ... -
为hibernate添加数据库方言函数
2013-06-27 19:31 5241在sessionFactory中配置hibernate.dia ... -
jvm内存映像分析
2013-05-23 20:11 6433jdk自带的jmap就是java内存映像工具,可以 ... -
n个数组各取一数的不重复组合
2013-04-27 00:00 2900package collection; import ... -
求最长的递增子数组
2013-04-24 13:58 1357package com.chinahrt.zyn.pang ... -
从m个字符选出n个的所有组合
2013-04-23 15:49 1519import java.util.ArrayList;imp ... -
查找最小的K个数
2013-04-13 12:04 1594package com.chinahrt.zyn.pango ... -
求连续子数组的最大和
2013-04-11 17:27 1474package com.chinahrt.zyn.pang ... -
求N个字符的全排列
2013-04-10 10:55 1734package com.chinahrt.zyn.pango ... -
web.xml的读取顺序
2013-03-30 11:22 4401由于项目中 ... -
spring的bean实例化时间
2013-03-30 10:54 2576前两天在问答频道看到有同学问spring的b ... -
把table表格内容导出为excel
2012-12-21 13:54 6137package com.chinahrt.report.e ... -
Java 编程规则(think in java 第四版)
2012-11-22 13:38 1218(1) 类名首字母应该大写 ... -
jetty嵌入式使用方法
2012-09-17 16:08 12142以jetty-hightide-8.1.6.v20120903 ... -
jmail接收邮件(转)
2012-08-07 10:57 2924package com.chinahrt.zyn; im ... -
java求集合交集和并集
2012-07-17 20:16 3513在问答频道遇到求助集合求交集或者并集的问题,自己翻了下api, ... -
应该被记住的 8 位 Java 人物
2012-06-27 21:54 873应该被记住的 8 位 Java 人物 81人收藏此新闻, ... -
自己写的一个类orm映射工具
2012-06-16 16:47 4202利用xml做配置文件,可以动态生成sql: package ... -
tomcat源码阅读(一)
2012-04-06 13:13 0次处代码以tomcat_6_0_18版本为例,从官 ...
相关推荐
3. 替换模板内容:调用poi-tl的`DocumentEngine`或`TemplateEngine`,传入数据模型,将模板中的占位符替换为实际值。 4. 保存生成的文档:将替换后的内容保存为新的Word文件。 例如,如果模板中有一行`亲爱的 ${...
4. **替换占位符**: 遍历模板文档,找到图片占位符,用FreeMarker的`process`方法替换为实际的图片数据。这通常涉及将图片转换为Base64编码字符串,以便能够在文档中嵌入。 5. **插入图片**: 使用POI的API在指定位置...
这些变量和占位符将在实际应用中被替换为实际数据,从而生成具体的业务目标制定报告。 业务目标制定 POI-TL 模板文件的主要内容是业务目标制定报告。报告中包括 OKR 目标制定人、部门、时间、业务目标、关键结果等...
本示例聚焦于使用POI库根据Word模板生成带有图片和文字的新Word文档。以下是对这一技术的详细解释: 1. **Apache POI库**:Apache POI是Apache软件基金会的一个开源项目,提供了Java API来操作Microsoft Office格式...
【Java POI 设置 Word 图片为上下型环绕及位置实现详解】 在使用 Java POI 库生成 Word 文档时,有时我们需要对插入的图片进行格式调整,比如设置为上下型环绕,使其在文本中占据独立空间,同时可以调整图片的位置...
在IT行业中,Apache POI是一个广泛使用的库,它允许开发者在Java环境中创建、修改和读取Microsoft Office格式的...通过学习和实践,你将能够熟练地使用Apache POI处理Excel模板,为你的业务提供强大的数据导出功能。
在Java代码中,我们会创建一个`XWPFDocument`对象来代表Word文档,然后通过`XWPFParagraph`和`XWPFRun`对象找到并替换模板中的占位符。例如,可以使用`getParagraphs()`方法获取文档中的所有段落,再通过`getText()`...
poi解析word模板,在需要填写 空白地方建立书签;程序遍历书签,并根据书签名称进行赋值。 <groupId>org.apache.poi <artifactId>poi <version>3.8 <groupId>org.apache.poi <artifactId>poi-ooxml ...
Apache POI提供了丰富的API,使得开发者能够方便地操作文档内容,包括文本、样式、图片等。 描述中提到的"定义好模板"是指在Word文档中预先设计好固定的格式,比如表格、标题、段落样式等,然后通过Apache POI的API...
在程序中,我们需要遍历Excel模板,找到这些自定义标签,然后根据业务逻辑替换为实际值。 以下是一些关键步骤和知识点: 1. **导入必要的POI库**:在项目中引入Apache POI的相关依赖,通常是`poi-ooxml`和`poi-...
3. **替换数据**:遍历书签列表,找到对应的XWPFParagraph或XWPFRun对象,然后使用setText()方法替换书签内的文本为实际数据。 4. **保存文档**:最后,使用XWPFDocument的write()方法将修改后的文档写入新的.docx...
标题“word测试替换书签模板”涉及到的是在Java编程环境下,如何操作Microsoft Word 97-2003版本的文档模板,特别是针对书签内容的替换。书签是Word中的一个功能,允许用户在文档中设置特定位置的标记,方便后续对...
这些变量是由后台Java代码提供,模板引擎会将这些变量替换为实际值,然后生成最终的输出文档。 在这个"freemarker根据word模板生成word的完整示例"中,描述提到的"template"文件夹存放了XML模板。XML模板是一种结构...
标签中的“885poicom ppt模板 javappt工具项目 poi_ppt”可能是项目名的一部分,暗示了该项目可能与885POICom组件有关,这可能是一个封装了Apache POI功能的库,提供更便捷的API用于处理PPT模板。 至于“Poi-ppt”...
第一种是将word模板设置成ftl格式,然后再进行标签替换。(缺点:标签太为复杂) 第二种则是通过esaypoi进行word模板导出,但是遇到有富文本框的数据,则就不咋好使了 第三种,则是今天要分享给大家的,也是我项目...
1. 预处理:将.doc文件另存为.xml,并分析模板结构,确定需要动态替换的部分。 2. 创建数据模型:根据模板内容,构建包含图片路径或数据的数据模型。 3. 加载Freemarker库:引入`freemarker-2.3.13.jar`,初始化...
标签虽然为空,但我们可以通过标题和描述推断出一些关键标签,如 "Android开发"、"Apache POI" 和 "Word模板处理"。 压缩包中的文件名进一步揭示了其内容: 1. **QQ截图20131120112452.jpg** - 这可能是一个截图,...
图片的插入通常会涉及`<#assign>`指令来定义变量,以及`<img>`标签来插入图片,其src属性为Base64编码的图片数据。 6. **readme.txt**:这个文件很可能是项目的说明文档,提供了关于如何配置、运行和理解示例的指导...
Word模板拥有丰富的样式,poi-tl在生成的文档中会完美保留模板中的样式,还可以为标签设置样式,标签的样式会被应用到替换后的文本上,因此您可以专注于模板设计。 poi-tl是一种“逻辑少”模板引擎,没有复杂的控制...
模板中的某些单元格可以被标记为变量,这些变量会在生成过程中被Java对象的属性值替换。 2. **数据绑定**:在Java代码中,你需要准备一个数据模型,通常是一个列表或集合,包含你要填充到Excel文件的对象。 3. **...