Docx4j操作word
目录
1. Docx4j介绍 ............................................................................................................................... 1
1.1. Docx4j介绍 ................................................................................................................ 1 2. Docx4j操作 ............................................................................................................................... 1
2.1. 初始读取word .......................................................................................................... 2 2.2. 标签替换 .................................................................................................................... 2 2.3. chart图表内容替换 .................................................................................................. 4 2.4. 插入图片 .................................................................................................................... 9 3. 文档的一些操作 ..................................................................................................................... 10
3.1. 合并word ................................................................................................................ 10 3.2. word转换成pdf ...................................................................................................... 12
1. Docx4j介绍
1.1. Docx4j介绍
docx4j是一个用于创建和操作Microsoft Open XML (Word docx, Powerpointpptx, 和 Excel xlsx)文件的Java类库。
http://www.docx4java.org/trac/docx4j官方主页。
2. Docx4j操作
2.1. 初始读取word
WordprocessingMLPackagewordMLPackage = WordprocessingMLPackage .load(WordChartDataRenderTest.class.getClassLoader().getResourceAsStream(\));
2.2. 标签替换
在操作word的时候,多数情况的下是通过标签进行替换相关的内容。标签在word中可以定义一个位置,或者标示一个段落内容。
在一个模板中定义好标签,在插入-》书签:然后定义好名称。 在java的代码中对标签进行遍历,得到该名称,并替换成相关的内容。
// try { List
2.3. chart图表内容替换
chart图的替换有两种方法,一种是word里面的插入的图表,这时在进行更改值的时候,需要更改图标的内容,然后再更新excel的相关内容。【没有找到更新一个自动更新另一个的方法。】
publicclassBarChartTest { publicstaticvoid main(String[] args) throws Docx4JException { WordprocessingMLPackagewordMLPackage = WordprocessingMLPackage .load(WordChartDataRenderTest.class.getClassLoader().getResourceAsStream(\)); ChartDatadata = newChartData(); ObjectFactoryfactory = new org.docx4j.wml.ObjectFactory(); Listparagraphs = wordMLPackage.getMainDocumentPart().getContent(); HashMapparts = wordMLPackage.getParts().getParts(); parts.forEach((partName, part) -> { if (partName.getName().toLowerCase().indexOf(\) > 0) { // s System.out.println(part.getClass().getName()); } // if (partName.getName().indexOf(\) > 0 && (partinstanceof Chart)) { Chart chart = (Chart) part; Listobjects; try { objects = chart.getContents().getChart().getPlotArea().getAreaChartOrArea3DChartOrLineChart(); if (objects.size() >= 1) { objects.forEach((obj) -> { if (objinstanceofCTBarChart) { CTBarChartctRadarChart = (CTBarChart) obj; String str = partName.getName(); str = str.substring(str.lastIndexOf(\) + 1); System.out.println(str); BarChartTest._renderCTBarChart(ctRadarChart, Arrays.asList(Arrays.asList(\, \), Arrays.asList(\, \)), Arrays.asList(\, \), Arrays.asList(\, \)); } }); } } catch (Docx4JException e) { e.printStackTrace(); } } // end if }); EmbeddedPackagePartepp = (EmbeddedPackagePart) wordMLPackage.getParts() .get(newPartName(\)); if (epp == null) { thrownew Docx4JException(\EmbeddedPackagePart:/word/embeddings/Microsoft_Excel____1.xlsx \); } InputStreamis = BufferUtil.newInputStream(epp.getBuffer()); SpreadsheetMLPackagespreadSheet = (SpreadsheetMLPackage) SpreadsheetMLPackage.load(is); MappartsMap = spreadSheet.getParts().getParts(); Iterator>it = partsMap.entrySet().iterator(); while (it.hasNext()) {