本篇文章将继续介绍通过Java来操作Word书签的方法,即替换Word中已有书签,包括用新的文本、图片、表格等替换原有书签处的内容。
https://www.e-iceblue.cn/licensing/install-spirepdf-for-java-from-maven-repository.html
word---插入---书签
使用工具:Free Spire.Doc for Java (免费版)
Jar文件获取及导入:
方法1:通过官网下载jar文件包。下载后,解压文件。并将lib文件夹下的Spire.Doc.jar文件导入到java程序。参考如下导入效果:
引入哪个版本可以用浏览器打来http://repo.e-iceblue.cn/repository/maven-public/查看http://repo.e-iceblue.cn/service/rest/repository/browse/maven-public/e-iceblue/spire.doc.free/下面的版本引用即可
pom.xml中:
假如引入的<artifactId>spire.doc</artifactId>没有.free导出的word文档中会有一行提示Evaluation Warning: The document was created with Spire.Doc for JAVA.;
应该改为<artifactId>spire.doc.free</artifactId>
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>http://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId> e-iceblue </groupId>
<artifactId>spire.doc.free</artifactId>
<version>3.9.0</version>
</dependency>
<dependencies>
Java代码示例
【示例1】用文本替换书签
import com.spire.doc.*;
import com.spire.doc.documents.BookmarksNavigator;
public class ReplaceBookmarkContentWithNewContent {
public static void main(String[]args){
//加载包含书签的Word文档
Document doc = new Document();
doc.loadFromFile("test.docx");
//定位到指定书签位置
BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(doc);
bookmarksNavigator.moveToBookmark("bookmark1");
//用文本内容替换原有书签位置的文本,新替换的内容与原文格式一致
bookmarksNavigator.replaceBookmarkContent("新文本内容!",true);
//保存文档
doc.saveToFile("replaceWithNewContent.docx",FileFormat.Docx_2013);
doc.dispose();
}
}
替换效果:
【示例2】用图片替换书签
import com.spire.doc.*;
import com.spire.doc.documents.BookmarksNavigator;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.TextBodyPart;
public class ReplaceBookmarkWithImg {
public static void main(String[]args){
//加载包含书签的文档
Document doc = new Document();
doc.loadFromFile("test.docx");
//定位到指定书签位置
BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(doc);
bookmarksNavigator.moveToBookmark("bookmark1");
//添加图片,替换原有书签内容
Paragraph para= new Paragraph(doc);
para.appendPicture("eth.png");
TextBodyPart bodyPart = new TextBodyPart(doc);
bodyPart.getBodyItems().add(para);
bookmarksNavigator.replaceBookmarkContent(bodyPart);
//保存文档
doc.saveToFile("replaceWithImg.docx",FileFormat.Docx_2013);
doc.dispose();
}
}
替换效果:
【示例3】用表格替换书签
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.TextRange;
public class ReplaceBookmarkContentWithTable {
public static void main(String[]args){
//加载包含书签的Word文档
Document doc = new Document();
doc.loadFromFile("test.docx");
//声明数组内容
String[][] data =
{
new String[]{"分类", "等级", "编号"},
new String[]{"A", "一级", "01A"},
new String[]{"B", "二级", "02B"},
new String[]{"C", "三级", "03C"},
};
//创建表格
Table table = new Table(doc, true);
table.resetCells(4, 3);
for (int i = 0; i < data.length; i++) {
TableRow dataRow = table.getRows().get(i);
for (int j = 0; j < data[i].length; j++) {
TextRange range = dataRow.getCells().get(j).addParagraph().appendText(data[i][j]);
range.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
range.getCharacterFormat().setFontName("楷体");
dataRow.getRowFormat().setHorizontalAlignment(RowAlignment.Center);
dataRow.getCells().get(j).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
}
}
//创建TextBodyPart对象
TextBodyPart bodyPart= new TextBodyPart(doc);
bodyPart.getBodyItems().add(table);
//定位到指定书签位置
BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(doc);
bookmarkNavigator.moveToBookmark("bookmark1");
//使用表格替换原书签的内容
bookmarkNavigator.replaceBookmarkContent(bodyPart);
//保存文档
doc.saveToFile("replaceWithTable.docx", FileFormat.Docx);
doc.dispose();
}
}
替换效果:
=============================== 重点问题================================
如果模板是放在项目下面的,打成jar包之后模板的目录可能会跟开发环境的不一致,会导致在开发的时候能正常使用,打jar包运行后报错的问题:
解决办法一、将模板踢出到项目外,引用项目外的路径
解决办法二、网上找解决路径打包后获取模板路径