岁在乙巳,秋深霜降,余方偃仰于案牍之间,神游八方,心驰云外,谓之"摸鱼"也。忽闻内子遥呼:"夫君!吾有 Word 一卷,其中图影纷纭,欲析而出之,奈何手拙,无计可施。"
余莞尔曰:"此易耳,何足挂齿!"遂振衣而起,执 GoLang 为笔,以四十行代码为策,顷刻成章。
然初稿虽就,意犹未足。思其文质未协,辞采稍疏,乃重加润色,务求清雅有致,不堕匠气。今录其法如下:
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"github.com/unidoc/unioffice/document"
)
func main() {
docPath := "./XL-36-001-20251030-189790.docx" // 此乃藏图之椟
outDir := "./extracted_images" // 此乃安图之所
if err := os.MkdirAll(outDir, os.ModePerm); err != nil {
log.Fatalf("筑室未成,愧对诸图:%v", err)
}
doc, err := document.Open(docPath)
if err != nil {
log.Fatalf("启椟不得,匣锁甚严:%v", err)
}
defer doc.Close()
for i, img := range doc.Images {
name := filepath.Join(outDir, fmt.Sprintf("image_%03d.png", i+1))
if err := img.WriteFile(name); err != nil {
log.Printf("第%d图逸散于虚空,惜哉:%v", i+1, err)
continue
}
fmt.Printf("第%d图已安厝于 %s,安然无恙。\n", i+1, name)
}
}
夫图者,形之精也;文者,意之舟也。今以数行简码,析千图于一瞬,非炫技也,实乃应内子之请,成闺中之托。
昔人云:"君子使物,不为物使。"今借 GoLang 之力,化繁为简,举重若轻,亦可谓得其道矣。
或问:"何以不用 Python?"
余笑曰:"Python 固佳,然 GoLang 如快马轻裘,一行抵十行,且编译如风,部署如电,岂不快哉?"
是日也,秋阳煦暖,代码清朗,妻得图而喜,余得闲而乐。
遂记之,以志斯事,并贻同好一笑。
—— 乙巳年九月晦日,于摸鱼斋
往期部分文章列表
- 从 4.8 秒到 0.25 秒:我是如何把 Go 正则匹配提速 19 倍的?
- 用 Go 手搓一个内网 DNS 服务器:从此告别 IP 地址,用域名畅游家庭网络!
- 我用Go写了个华容道游戏,曹操终于不用再求关羽了!
- 用 Go 接口把 Excel 变成数据库:一个疯狂但可行的想法
- 穿墙术大揭秘:用 Go 手搓一个"内网穿透"神器!
- 布隆过滤器(go):一个可能犯错但从不撒谎的内存大师
- 自由通讯的魔法:Go从零实现UDP/P2P 聊天工具
- Go语言实现的简易远程传屏工具:让你的屏幕「飞」起来
- 当你的程序学会了"诈尸":Go 实现 Windows 进程守护术
- 验证码识别API:告别收费接口,迎接免费午餐
- 用 Go 给 Windows 装个"顺风耳":两分钟写个录音小工具
- 无奈!我用go写了个MySQL服务
- 使用 Go + govcl 实现 Windows 资源管理器快捷方式管理器
- 用 Go 手搓一个 NTP 服务:从"时间混乱"到"精准同步"的奇幻之旅
- 用 Go 手搓一个 Java 构建工具:当 IDE 不在身边时的自救指南
- 深入理解 Windows 全局键盘钩子(Hook):拦截 Win 键的 Go 实现
- 用 Go 语言实现《周易》大衍筮法起卦程序
- Go 语言400行代码实现 INI 配置文件解析器:支持注释、转义与类型推断
- 高性能 Go 语言带 TTL 的内存缓存实现:精确过期、自动刷新、并发安全
- Golang + OpenSSL 实现 TLS 安全通信:从私有 CA 到动态证书加载