# Word 文档插入图像

以下示例演示如何在 aardio 中使用 NPOI 库创建 Word 文档并插入图片。

```aardio
import NPOI.XWPF.UserModel;
import System.IO;

// 创建新的 Word 文档对象
var doc = NPOI.XWPF.UserModel.XWPFDocument();

// 创建段落
var p2 = doc.CreateParagraph();
// 在段落中创建文本运行对象
var r2 = p2.CreateRun();

// 计算图片尺寸（单位：EMUs，1英寸=914400 EMUs，1厘米=360000 EMUs）
var widthEmus = math.round(400.0 * 9525);  // 约4.2厘米宽
var heightEmus = math.round(300.0 * 9525); // 约3.1厘米高

/*
读取图片文件并插入到文档中
参数说明：
1. 图片数据流
2. 图片类型（JPEG格式）
3. 图片ID（可自定义）
4. 宽度（EMUs单位）
5. 高度（EMUs单位）
*/
var picData = System.IO.FileStream("HumpbackWhale.jpg", "r+");
r2.AddPicture(picData, NPOI.XWPF.UserModel.PictureType.JPEG, "image1", widthEmus, heightEmus);
picData.Close();

// 保存文档到文件
var fs = System.IO.FileStream("sample.docx", "w+");
doc.Write(fs);
fs.Close();
```

## 关键点说明

1. **单位转换**：
   - Word 中图片尺寸使用 EMUs 单位（English Metric Units）
   - 1英寸 = 914400 EMUs
   - 1厘米 ≈ 360000 EMUs
   - 示例中 9525 是 NPOI 内部使用的转换系数

2. **图片类型**：
   - NPOI 支持多种图片格式，通过 `PictureType` 枚举指定：
     - `PictureType.JPEG`
     - `PictureType.PNG`
     - `PictureType.BMP` 等

3. **文件操作**：
   - 使用 `System.IO.FileStream` 进行文件读写
   - 注意在 aardio 中需要手动关闭文件流（调用 Close() 方法）

4. **与 C# 的区别**：
   - aardio 中没有 `using` 语句块，需要手动关闭流对象
   - 类型转换更简单，不需要显式类型声明
   - 数学计算使用 aardio 的 `math` 库函数

这个示例展示了 NPOI 操作 Word 文档的基本能力，你可以进一步添加文本、表格、样式等丰富文档内容。