删除线格式通常用于在生成的文档中指示删除、修订或已完成的任务。Conholdate.Total for Java 提供了一个强大的 SDK,允许您以编程方式操作 Word 文档。在本指南中,您将学习如何在 Java 中添加删除线文本,探索配置选项,了解性能最佳实践,并运行一个完整的示例,您可以将其适配到自己的项目中。
开始之前:先决条件和安装
要遵循本教程,您需要:
- 在开发机器上安装 Java 17 或更高版本。
- 用于依赖管理的 Maven 3.6+。
- 如 IntelliJ IDEA 或 Eclipse 等 IDE。
将 Conholdate Maven 仓库和 SDK 依赖项添加到您的 pom.xml 中:
<repositories>
<repository>
<id>conholdate-repo</id>
<name>Conholdate Maven Repository</name>
<url>https://repository.conholdate.com/repo/</url>
</repository>
</repositories>
<dependency>
<groupId>com.conholdate</groupId>
<artifactId>conholdate-total</artifactId>
<version>24.9</version>
<type>pom</type>
</dependency>
如果您更喜欢手动设置,请从下载页面下载最新的 SDK 二进制文件。依赖解析完成后,您即可开始编码。下一节将逐步演示在 Java 中添加删除线文本的每个步骤。
Java 中删除线文本的分步指南
步骤 1:加载源文档
首先,创建一个 Document 实例。如果输入文件存在,SDK 会加载它;否则会创建一个新的空文档。
String inputPath = "input.docx";
Document doc;
File inputFile = new File(inputPath);
if (inputFile.exists()) {
doc = new Document(inputPath); // loads existing DOCX
} else {
doc = new Document(); // creates a new blank document
doc.removeAllChildren(); // ensure it's empty
}
Document 类的文档位于 API 参考。
步骤 2:编写普通段落
使用 DocumentBuilder 添加普通段落。这表明普通文本不受删除线设置的影响。
DocumentBuilder builder = new DocumentBuilder(doc);
builder.moveToDocumentEnd();
builder.writeln("This is a normal paragraph.");
步骤 3:应用删除线格式
在写入样式文本之前,先在构建器的字体上启用删除线标志。
builder.getFont().setStrikeThrough(true);
builder.writeln("This text is rendered with strikethrough.");
builder.getFont().setStrikeThrough(false); // reset for subsequent text
第4步:搜索并应用条件删除线
遍历所有 Run 对象,查找单词 “strike”,并以编程方式应用格式。
for (Paragraph para : (Iterable<Paragraph>) doc.getChildNodes(NodeType.PARAGRAPH, true)) {
for (Run run : (Iterable<Run>) para.getChildNodes(NodeType.RUN, true)) {
String text = run.getText();
if (text != null && text.toLowerCase().contains("strike")) {
run.getFont().setStrikeThrough(true);
}
}
}
第5步:保存文档
最后,将修改后的文档以 DOCX 格式写入磁盘。
String outputPath = "output.docx";
doc.save(outputPath, SaveFormat.DOCX);
保存文档后,您可以打开 output.docx 来验证删除线样式是否如预期显示。
删除线文本的完整工作示例(Java 示例)
以下代码演示了在 Java 中使用 Conholdate.Total 添加删除线文本的完整工作流程。
import com.aspose.words.*;
import java.io.File;
public class StrikethroughExample {
public static void main(String[] args) {
String inputPath = "input.docx";
String outputPath = "output.docx";
Document doc = null;
try {
File inputFile = new File(inputPath);
if (inputFile.exists()) {
doc = new Document(inputPath);
} else {
doc = new Document();
doc.removeAllChildren();
}
DocumentBuilder builder = new DocumentBuilder(doc);
builder.moveToDocumentEnd();
builder.writeln("This is a normal paragraph.");
builder.getFont().setStrikeThrough(true);
builder.writeln("This text is rendered with strikethrough.");
builder.getFont().setStrikeThrough(false);
for (Paragraph para : (Iterable<Paragraph>) doc.getChildNodes(NodeType.PARAGRAPH, true)) {
for (Run run : (Iterable<Run>) para.getChildNodes(NodeType.RUN, true)) {
String text = run.getText();
if (text != null && text.toLowerCase().contains("strike")) {
run.getFont().setStrikeThrough(true);
}
}
}
doc.save(outputPath, SaveFormat.DOCX);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (doc != null) {
doc = null;
}
}
}
}
注意: 此代码示例演示了核心功能。在将其用于项目之前,请确保更新所有文件路径和配置值以匹配实际环境,验证已正确安装所有必需的依赖项,并在开发环境中进行彻底测试。如果遇到任何问题,请参阅官方文档或联系支持团队获取帮助。
微调删除线样式选项
SDK 允许您在保持删除线标志启用的同时,控制额外的字体属性,如颜色、大小和下划线。例如,您可以更改删除线文本的颜色:
builder.getFont().setColor(java.awt.Color.RED);
builder.getFont().setStrikeThrough(true);
builder.writeln("Important deletion highlighted in red.");
如果需要对多个 Run 应用相同的样式,建议创建一个可重用的 Font 实例并将其分配给每个 Run,以避免重复设置属性。
对删除线渲染的性能考虑
- Reuse the
Documentobject - 将文档加载一次并在单个会话中完成所有修改,可减少 I/O 开销。 - Batch style changes - 将删除线标记应用于
Paragraph或Run集合,而不是对每个字符逐个切换。 - Avoid unnecessary traversals - 仅在确实需要动态样式时才执行搜索单词 “strike” 的条件循环。
- Stream output when possible - 对于大型文档,使用
doc.save(OutputStream, SaveFormat.DOCX)直接写入流以节省内存。
这些技巧有助于保持内存使用低并加快执行时间,尤其是在批处理作业中处理数百个文档时。
最终思考
在 Java 中添加删除线文本非常简单,只需使用 Conholdate.Total for Java。SDK 的流式 API 允许您混合普通段落和样式段落,应用条件格式,并将结果保存为行业标准格式。请记得配置 Maven 依赖,重复使用文档对象,并高效地应用样式,以实现最佳性能。对于生产部署,您需要有效的许可证;定价详情请参阅 定价页面,临时许可证可从 临时许可证页面 获取。祝编码愉快!
您可能会有的问题
如何在 Java 中应用删除线文本,而无需为每个 run 手动设置标志?
在写段落之前使用DocumentBuilder.getFont().setStrikeThrough(true)。该标志会保持激活状态,直到你重置它,从而可以使用相同的样式写多行。我可以自动对关键字的每一次出现进行删除线吗?
是的。 如演练中所示,遍历每个Run,检查run.getText()是否包含关键字,并在匹配时调用run.getFont().setStrikeThrough(true)。哪些文档格式在保存时会保留删除线?
DOCX、DOC、RTF,以及其他富文本格式都会保留删除线属性。请参阅官方文档以获取支持格式的完整列表。在大量文件中应用许多删除线样式会减慢处理速度吗?
如果遵循性能提示,影响很小:复用Document实例、批量样式更改,并避免冗余遍历。这可以保持低内存使用并加快处理速度。
