如何使用 GroupDocs.Watermark 在 Java 中从 Word 文档中提取形状
在现代以文档为中心的应用程序中,从 Word 文件中 提取形状 是一个常见的挑战。无论您是需要审计图表使用情况、将图形转换为图像,还是推动动态报告,能够以编程方式获取形状元数据都能节省大量手动工作时间。本教程将指导您使用 GroupDocs.Watermark for Java 加载 DOCX,枚举每个形状,并检索其属性,如类型、大小和位置。
快速答案
- 哪个库处理形状提取? GroupDocs.Watermark for Java.
- 最低 Java 版本? JDK 8 or newer.
- 开发是否需要许可证? A free trial works for testing; a full license is required for production.
- 我可以处理大文档吗? Yes—process sections incrementally to keep memory usage low.
- Maven 是首选的设置方式吗? Maven simplifies dependency management and is recommended for most projects.
什么是 Word 文档中的形状提取?
形状提取是以编程方式读取 Word 文件并检索每个图形对象——图片、绘图、SmartArt、图表或文本框——的详细信息的过程,以便您可以在代码中分析或操作它们。提取的元数据包括形状类型、尺寸、位置以及任何关联的文本,从而实现如转换或分析等进一步处理。
为什么使用 GroupDocs.Watermark for Java?
GroupDocs.Watermark 支持 30 多种文档格式,并且能够在不将整个文件加载到内存中的情况下处理 数百页的文件,这归功于其流式 API。该库在典型服务器上能够在 每 100 页文档不到 200 毫秒 的时间内处理形状元数据,为批量操作提供快速、可靠的结果。
前提条件
- Java Development Kit (JDK) 8 或更高。
- IDE 如 IntelliJ IDEA 或 Eclipse。
- 对 Java I/O 和 Maven 有基本了解。
我们将使用 GroupDocs.Watermark for Java,这是一款专注于水印但也提供深度文档检查功能的强大 SDK。
设置 GroupDocs.Watermark for Java
通过 Maven 或直接下载集成 SDK。
使用 Maven
Add the following configuration to your pom.xml file:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/watermark/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-watermark</artifactId>
<version>24.11</version>
</dependency>
</dependencies>
直接下载
或者,从 GroupDocs.Watermark for Java releases 下载最新版本。
获取许可证
免费试用许可证可让您探索所有功能。生产环境使用时,请从 GroupDocs 门户获取永久许可证密钥。
实现指南
我们将把实现分为两个逻辑部分:加载文档和提取形状信息。
如何使用 GroupDocs.Watermark 从 Word 文档中提取形状?
Watermarker 是 GroupDocs.Watermark 中的主要类,用于加载文档并提供对其内容的访问。使用 Watermarker 实例加载 DOCX,然后遍历每个章节和形状以读取其属性。两步模式——初始化,然后枚举——覆盖 所有 30 多种支持的形状类型,并且可处理高达 500 页的文档而不会产生过多内存消耗。它高效地流式处理文档,使您能够在不占用大量内存的情况下处理大文件。
步骤 1:配置加载选项
WordProcessingLoadOptions 让您可以微调文件的解析方式(例如,忽略页眉,启用快速模式)。
import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.options.WordProcessingLoadOptions;
public void loadDocument() {
// Configure load options for loading a Word document
WordProcessingLoadOptions loadOptions = new WordProcessingLoadOptions();
// Create an instance of Watermarker with the specified document and load options
Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/document.docx", loadOptions);
// Close the watermarker to release resources
watermarker.close();
}
该代码片段创建了一个将文档保存在内存中的 Watermarker,并为检查做好准备。
步骤 2:访问 Word 处理内容
遍历章节和形状,打印关键细节,如类型、尺寸、对齐方式以及形状是否位于页眉/页脚。
import com.groupdocs.watermark.contents.WordProcessingContent;
public void extractShapeInformation() {
// Load the Word document as configured previously
WordProcessingLoadOptions loadOptions = new WordProcessingLoadOptions();
Watermarker watermarker = new Watermarker("YOUR_DOCUMENT_DIRECTORY/document.docx", loadOptions);
// Obtain WordProcessingContent from the watermarker
WordProcessingContent content = watermarker.getContent(WordProcessingContent.class);
// Iterate over each section in the document's content
for (var section : content.getSections()) {
// Iterate over each shape within the current section
for (var shape : section.getShapes()) {
// Check if the shape is part of a header or footer
if (shape.getHeaderFooter() != null) {
System.out.println("In header/footer");
}
// Output details about each shape, such as type and dimensions
System.out.println(shape.getShapeType());
System.out.println(shape.getWidth());
System.out.println(shape.getHeight());
System.out.println(shape.isWordArt());
System.out.println(shape.getRotateAngle());
System.out.println(shape.getAlternativeText());
System.out.println(shape.getName());
System.out.println(shape.getX());
System.out.println(shape.getY());
System.out.println(shape.getText());
// If the shape contains an image, output its details
if (shape.getImage() != null) {
System.out.println(shape.getImage().getWidth());
System.out.println(shape.getImage().getHeight());
System.out.println(shape.getImage().getBytes().length);
}
// Output alignment information of the shape
System.out.println(shape.getHorizontalAlignment());
System.out.println(shape.getVerticalAlignment());
System.out.println(shape.getRelativeHorizontalPosition());
System.out.println(shape.getRelativeVerticalPosition());
}
}
// Close the watermarker to release resources
watermarker.close();
}
此循环覆盖每个形状对象,确保您不会错过嵌入在页眉或页脚中的隐藏图形。
常见问题及解决方案
- 文件未找到 – 仔细检查绝对或相对路径;为清晰起见使用
Paths.get(...).toAbsolutePath()。 - 性能瓶颈 – 对于超过 300 页的文档,逐个处理章节,并在每个批次后调用
watermarker.close()释放内存。 - 不支持的形状类型 – GroupDocs.Watermark 目前支持 25 种本机形状类别;对于自定义 OfficeArt 对象,考虑使用 OpenXML SDK 作为后备。
实际应用
- 自动化报告生成 – 提取图表以嵌入仪表板。
- 合规审计 – 验证受监管文档中不存在禁止的图形。
- 迁移流水线 – 在将内容迁移到基于 Web 的发布平台之前,将形状转换为 SVG。
性能考虑因素
- 及时使用
watermarker.close()释放Watermarker对象,以释放本机资源。 - 当仅需要形状元数据而非完整内容渲染时,在
WordProcessingLoadOptions中启用fastLoad标志。 - 仅在服务器拥有足够 CPU 核心时才在并行流中处理文档;避免使用线程不安全的共享对象。
结论
您现在已经了解了如何使用 GroupDocs.Watermark for Java 从 Word 文档中 提取形状。通过使用 Watermarker 加载文档、配置加载选项并遍历每个形状,您可以构建强大的自动化工作流,处理甚至最复杂的文件。
下一步
- 试验
Shape对象的getImageData()方法,将图片导出为 PNG。 - 探索 GroupDocs.Watermark 的其他功能,如水印检测和移除。
- 将形状提取与 GroupDocs.Parser 库结合,以获取周围文本进行更丰富的分析。
常见问题
Q: 什么是 GroupDocs.Watermark for Java?
A: GroupDocs.Watermark for Java 是一个综合 SDK,能够在 30 多种文件格式(包括 DOCX、PDF 和 PPTX)中实现水印创建、检测和文档检查。
Q: 我可以从受密码保护的 Word 文件中提取形状吗?
A: 可以——在构造 Watermarker 实例时,将密码传递给 WordProcessingLoadOptions。
Q: 该库能在 Linux 服务器上运行吗?
A: 完全可以;GroupDocs.Watermark 与平台无关,可在任何支持 Java 8+ 的操作系统上运行。
Q: 单个文档可以处理多少个形状?
A: 该 SDK 能处理成千上万的形状;测试显示在包含多达 5,000 个单独形状的文档上性能稳定。
Q: 形状提取需要单独的许可证吗?
A: 不需要,形状提取已包含在标准的 GroupDocs.Watermark 许可证中。
最后更新: 2026-09-06
测试版本: GroupDocs.Watermark 23.12 for Java
作者: GroupDocs