删除线格式通常用于在生成的文档中指示删除、修订或已完成的任务。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,以避免重复设置属性。

对删除线渲染的性能考虑

  1. Reuse the Document object - 将文档加载一次并在单个会话中完成所有修改,可减少 I/O 开销。
  2. Batch style changes - 将删除线标记应用于 Paragraph 或 Run 集合,而不是对每个字符逐个切换。
  3. Avoid unnecessary traversals - 仅在确实需要动态样式时才执行搜索单词 “strike” 的条件循环。
  4. 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 实例、批量样式更改,并避免冗余遍历。这可以保持低内存使用并加快处理速度。

相关文章