docx4j操作word

2019-08-20 19:58

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 { Listparagraphs = wordMLPackage.getMainDocumentPart().getContent(); RangeFinderrt = newRangeFinder(\, \); newTraversalUtil(paragraphs, rt); // 遍历所有的标签 for (CTBookmarkbm :rt.getStarts()) { if (StringUtil.isEmpty(bm.getName())) continue; ReportDataobj = data.get(bm.getName()); if (obj == null || !(objinstanceofReportData)) { if(bm.getName().indexOf(\) == 0){ }else{ logger.error(\ + bm.getName()); } continue; } try { ListtheList = null; ParaRPrrpr = null; if (bm.getParent() instanceof P) { PPrpprTemp = ((P) (bm.getParent())).getPPr(); if (pprTemp == null) { rpr = null; } else { rpr = ((P) (bm.getParent())).getPPr().getRPr(); } theList = ((ContentAccessor) (bm.getParent())).getContent(); } else { continue; } intrangeStart = -1; intrangeEnd = -1; inti = 0; for (Object ox :theList) { Object listEntry = XmlUtils.unwrap(ox); if (listEntry.equals(bm)) { rangeStart = i + 1; } elseif (listEntryinstanceofCTMarkupRange) { if (((CTMarkupRange) listEntry).getId().equals(bm.getId())) { rangeEnd = i - 1; break; } } i++; } if (rangeStart>= 0) { for (intj = rangeEnd; j>= rangeStart; j--) { theList.remove(j); } org.docx4j.wml.R run = factory.createR(); org.docx4j.wml.Text t = factory.createText(); run.getContent().add(t); if (rpr != null) run.setRPr(paraRPr2RPr(rpr, factory)); t.setValue(value); theList.add(rangeStart, run); } } catch (Exception cce) { logger.error(cce.getMessage(), cce); throwcce; } } } catch (Exception e) { throwe; } 找到相应的位置然后替换,相应的文本,需要注意的是替换相关的内容的格式。

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()) {


docx4j操作word.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

Copyright © 2019-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18

× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: