第一步,继承XWPFDocument,写一个操作图片写入大小、位置的方法, 如果没有此方法,图片写入不会报错,但是打开Word文档,会看不到图片:
package word; 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; public class CustomXWPFDocument extends XWPFDocument{ public CustomXWPFDocument(InputStream in) throws IOException { super(in); } public CustomXWPFDocument() { super(); } public CustomXWPFDocument(OPCPackage pkg) throws IOException { super(pkg); } /** * @param id * @param width * 宽 * @param height * 高 * @param paragraph * 段落 */ 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 = 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>"; 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("图片名称"); docPr.setDescr("描述信息"); } }
第二步,具体操作,写入文字与图片:
package word; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class Test { public static void main(String[] args) throws Exception{ exportSimpleWord(); } public static void exportSimpleWord() throws Exception { CustomXWPFDocument document = new CustomXWPFDocument(); String path = "D://测试"; FileOutputStream out = new FileOutputStream(new File(path + ".doc")); // 添加标题 XWPFParagraph titleParagraph = document.createParagraph(); // 设置段落居中 titleParagraph.setAlignment(ParagraphAlignment.CENTER); XWPFRun titleRun = titleParagraph.createRun(); titleRun.setText("Java操作word文档,插入文字与图片"); titleRun.setFontSize(20); titleRun.setFontFamily("宋体"); titleRun.setBold(true); XWPFParagraph firstParagraph = document.createParagraph(); XWPFRun firstRun = firstParagraph.createRun(); firstRun.setText("具体操作方式:"); firstRun.setFontFamily("仿宋"); firstRun.setFontSize(11); //换行 firstParagraph.setWordWrap(true); XWPFParagraph twoParagraph = document.createParagraph(); twoParagraph.setIndentationFirstLine(500); XWPFRun twoRun = twoParagraph.createRun(); twoRun.setFontFamily("仿宋"); twoRun.setFontSize(11); twoRun.setText("继承POI操作Word中类XWPFDocument。"); FileInputStream in = new FileInputStream("D://logo.jpg"); byte[] ba = new byte[in.available()]; in.read(ba); ByteArrayInputStream byteInputStream = new ByteArrayInputStream(ba); XWPFParagraph picture = document.createParagraph(); //添加图片 document.addPictureData(byteInputStream, CustomXWPFDocument.PICTURE_TYPE_JPEG); //图片大小、位置 document.createPicture(document.getAllPictures().size() - 1, 100, 100, picture); document.write(out); out.close(); } }
相关推荐
本项目“Java利用poi对word插入文字图片”是一个具体的示例,旨在教给你如何使用Apache POI API在Word文档中插入文字和图片。下面将详细阐述相关的知识点。 首先,Apache POI提供了HWPF(Horrible Word Processor ...
本示例将深入探讨如何使用Apache POI库来替换Word文档中的文字和图片,并实现打印功能。 首先,确保在项目中正确导入了Apache POI相关的JAR包。通常,这包括poi-ooxml、poi-ooxml-schemas和commons-lang3等。这些库...
在Java中,如果你需要在Word文档中插入图片,POI库提供了解决方案。这个过程涉及到对Word文档的内部结构有深入的理解,包括其XML表示形式,以及如何通过API来操作这些元素。 首先,我们需要导入必要的库,包括POI的...
以上就是使用Java和Apache POI根据Word模板生成带有图片和文字的Word文档的基本步骤和技术要点。通过这种方式,开发者可以方便地批量生成定制化的报告、合同或其他文档,极大地提高了工作效率。
Java使用Apache POI库导出Word文档是一种常见的技术实践,特别是在企业级应用中,用于生成报告、合同或者自定义的数据输出。Apache POI是Apache软件基金会的一个开源项目,它提供了处理Microsoft Office格式(如Word...
在本文中,我们将深入探讨如何使用Apache POI在Word文档中插入文本和图片,这对于创建动态报告模板尤其有用。 一、Apache POI基础 Apache POI提供了一系列接口和类,用于读写微软的Office文件格式。对于Word处理,...
在实际应用中,Apache POI 的功能不仅限于简单的读写操作,还支持复杂的格式转换、样式调整和模板填充等功能,是 Java 开发者处理 Word 文件的强大工具。然而,需要注意的是,由于 `.doc` 文件格式的复杂性,处理...
2. **打开Word文档**:使用POI API创建一个`XWPFDocument`对象,如果你处理的是.docx文件,或者`HWPFDocument`对象,如果你处理的是.doc文件。这通常涉及到读取文件并将其流化到内存中。 3. **遍历文档内容**:通过...
通过上述步骤,开发者可以有效地利用Apache POI库在Java中对Word文档进行数据填充和文件合并,提高工作效率,减少手动操作带来的错误。在实践中,可能还需要考虑性能优化、异常处理等细节问题,以确保程序的稳定性...
Java中的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,包括Word文档。在这个“java--Poi 生成word文档”的示例中,我们将深入探讨如何利用POI库来生成Word文档。Apache POI提供...
本篇将深入探讨如何使用Apache POI库来替换Word文档中的图片,无论文档是.doc还是.docx格式。 首先,我们需要理解Apache POI的工作原理。POI提供了一个高级API,允许开发者读取、创建和修改Office文档。对于Word...
### POI导入Word文档与图片的关键技术点 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件(如 .doc、.xls 和 .ppt)的 Java API。本文档将详细介绍如何使用 POI 库来读取 Word 文档(包括 ....
"利用Java Apache POI 生成Word文档示例代码" 本篇文章主要介绍了利用Java Apache POI 生成Word文档示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 首先,Apache POI是一个开源的Java库,由Apache...
- 完成所有操作后,使用`XWPFDocument`的`write()`方法将更新后的文档写入到一个新的文件中,这样就生成了基于模板的新Word报告。 - 要注意关闭所有的输入和输出流,以释放系统资源。 6. **使用示例**: - 具体...
标题中的“poi解析word文档”指的是使用Apache POI库来处理Microsoft Word(.doc或.docx)文件。Apache POI是Java中一个流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Word、Excel和...
在这种情况下,Apache POI 项目便提供了一种解决方案,允许 Java 应用程序读取、写入和操作 Microsoft Office 文件格式,包括 Word 文档。 POI 项目简介 Apache POI 项目是 Apache 软件基金会的一个开源项目,旨在...
Java POI库是Apache软件基金会的一个开源项目,它允许开发者读取、创建、修改Microsoft Office格式的文件,包括Word文档(.doc和.docx)。在本案例中,"java POI生成word.zip"是一个压缩包,包含使用Java POI库生成...
Java POI 是一个非常强大的库,它允许程序员在Java环境中操作Microsoft Office格式的文件,包括Word、Excel和PowerPoint等。在这个场景中,我们关注的是使用POI来通过模板生成Word文档。这个过程通常涉及到读取一个...
在Java开发中,有时我们需要处理文档模板,将动态数据填入到Word模板中,并且可能还需要将处理后的Word文档转换为PDF格式,同时在PDF上添加水印。在这个场景下,`Apache POI`和`Aspose.Words for Java`是两个常用的...