PDF2IMG-将PDF转换为图像
Go中的一个完整工具,用于将PDF页面渲染为PNG或JPG图像。包括CLI应用程序和MCP(模型上下文协议)服务器。
特性
- ✨ 高质量渲染 使用go-pdfium v1.17.2(基于pdfium)
- 🖼️ 多种格式:PNG和JPG
- 🎯 精细控制:可定制的DPI,可配置的页面范围
- 💻 完整的CLI:具有多个选项的命令行界面
- 🔌 MCP服务器:与模型上下文协议集成
- 📊 PDF信息:获取PDF文件元数据的命令
- 🗜️ pdf压缩:优化和压缩PDF文件以减小大小
- 🚀 纯Go:无CGO,嵌入式WebAssembly,单个二进制文件(约18 MB)
- 🔒 跨平台:Windows、Linux、macOS
安装
先决条件
- 达到1.21或更高
- 备注:不需要外部PDFium,所有内容都嵌入二进制文件中
源代码
git clone
cd pdf2img
go mod download
go build -o pdf2img ./cmd/pdf2img全球安装
go install github.com/tu-usuario/pdf2img/cmd/pdf2img@latest用法
CLI-基本转换
# Convert all pages to PNG
pdf2img -i document.pdf -o ./output
# Convert to JPG with custom DPI
pdf2img -i document.pdf -o ./output -f jpg -d 300
# Convert only pages 1-10
pdf2img -i document.pdf -o ./output --start 1 --end 10
# With custom prefix
pdf2img -i document.pdf -o ./output --prefix img_CLI-获取PDF信息
pdf2img info document.pdf输出:
PDF Information
===============
File: document.pdf
Pages: 25
Size: 2.50 MB
Width: 612.00 pt
Height: 792.00 ptCLI选项
| 选项 | 简短 | 描述 | 默认 |
|---|---|---|---|
--input | -i | PDF路径(必填) | - |
--output | -o | 输出目录 | . |
--format | -f | 格式:png或jpg | png |
--dpi | -d | 用于渲染的DPI | 150 |
--start | - | 起始页(1-索引) | 0 (第一) |
--end | - | 结束页(1个索引) | 0 (最后) |
--prefix | - | 输出文件的前缀 | page_ |
--verbose | -v | 详细输出 | false |
MCP服务器
pdf2img MCP服务器支持与Claude Desktop和其他支持模型上下文协议的系统集成。
使用Claude Desktop进行配置(推荐)
⚡ 快速指南:阅读 MCP_CLAUDESKTOP.md 获取分步说明。
总结:
- 编译:
go build -o mcp-server.exe ./cmd/mcp-server - 编辑
claude_desktop_config.json(in%APPDATA%\Claude\) - 添加:
{
"mcpServers": {
"pdf2img": {
"command": "C:\\path\\to\\mcp-server.exe",
"args": ["--stdio"]
}
}
}- 重新启动克劳德桌面
- 完成!现在您可以使用Claude的pdf2imig
有问题吗? 阅读 MCP_钻孔.md 用于排除常见问题。
程序化使用
要在Go代码中使用MCP服务器:
package main
import (
"log"
"github.com/tu-usuario/pdf2img/mcp"
)
func main() {
server, err := mcp.NewMCPServer()
if err != nil {
log.Fatal(err)
}
defer server.Close()
// Use server.ExecuteTool() to execute tools
tools := server.GetTools()
for _, tool := range tools {
log.Printf("Available: %s", tool.Name)
}
}可用的MCP工具
pdf_to_images
将PDF页面转换为PNG或JPG图像。
{
"pdf_path": "document.pdf",
"output_dir": "./output",
"format": "png",
"dpi": 150,
"start_page": 0,
"end_page": 0,
"prefix": "page_"
}备注: start_page 和 end_page 值为0表示“所有页面”。
pdf_info
获取PDF信息(页面、大小、尺寸)。
{
"pdf_path": "document.pdf"
}操作模式
MCP服务器支持两种模式:
- 标准 (Claude Desktop的默认设置):
mcp-server --stdio - 超文本传输协议:
mcp-server --port 8080(用于测试)
更多示例请参见 示例.md.
项目结构
pdf2img/
├── cmd/
│ └── pdf2img/
│ └── main.go # CLI application
├── mcp/
│ └── server.go # MCP server
├── pkg/
│ └── converter/
│ └── converter.go # Shared conversion logic
├── go.mod # Dependencies
└── README.md # This file依赖项
- go pdfium v1.17.2 (Apache 2.0):使用PDFium WebAssembly进行PDF渲染
- 眼镜蛇v1.10.1 (Apache 2.0):CLI框架
- mark3labs/mcp版本0.43.0 (Apache 2.0):官方MCP SDK
- wazero v1.9.0 (Apache 2.0):Go的WebAssembly运行时(包含在Go-pdfium中)
例子
示例1:将整个文档转换为高分辨率
pdf2img -i book.pdf -o ./images -f jpg -d 300创建以下文件: page_0001.jpg, page_0002.jpg等等。
示例2:仅提取前5页
pdf2img -i report.pdf -o ./thumbs --start 1 --end 5 --prefix thumb_创建: thumb_0001.png, thumb_0002.png等等。
示例3:PDF信息
pdf2img info form.pdf示例4:从Go代码开始
package main
import (
"log"
"github.com/tu-usuario/pdf2img/pkg/converter"
)
func main() {
conv, err := converter.New()
if err != nil {
log.Fatal(err)
}
defer conv.Close()
result, err := conv.Convert(&converter.ConvertOptions{
InputPath: "document.pdf",
OutputDir: "./output",
Format: "png",
DPI: 150,
})
if err != nil {
log.Fatal(err)
}
log.Printf("Successful: %d, Failed: %d", result.Successful, result.Failed)
}技术
WebAssembly实现
此项目使用 使用WebAssembly访问pdfium v1.17.2,它提供:
- 纯Go:无CGO依赖关系,无需在主机上使用C编译器
- 单一二进制:所有内容都嵌入在一个可执行文件中(约18 MB)
- 跨平台:相同的二进制文件适用于Windows、Linux、macOS
- 演出:比多线程CGO版本快约2倍
- 安全:WebAssembly沙盒中的独立执行
为什么选择WebAssembly
选择WebAssembly而不是CGO是因为:
- ❌ CGO需要主机上的C编译器(在不同系统上有问题)
- ❌ go pdfium v1.12.0 CGO存在严重的兼容性错误
- ✅ WebAssembly更健壮、更便携
- ✅ 编译后不需要外部依赖
- ✅ 更好的资源隔离
📚 文档
公共文件
- QUICKSTART.md -5分钟后开始
- 示例.md -实际使用案例
- Developpent.md -发展指南
- 项目_结构.md -代码结构
- 贡献.md -如何做出贡献
- MCP_CLAUDESKTOP.md -Claude桌面集成
- MCP_钻孔.md -MCP故障排除
- 更改日志.md -更改历史记录
- 安全.md -安全策略
- 代码_OF_CONDUCT.md -行为守则
内部文档
有关维护人员和详细技术信息,请参阅 docs/README.md
______________________________________________________________________
故障排除
错误:“找不到PDF文件”
验证PDF路径是否正确:
ls -la document.pdf错误:“初始化PDFium失败”
确保Go可以下载依赖项:
go mod download
go mod verify图像以低分辨率显示
增加DPI值:
pdf2img -i document.pdf -o ./output -d 300 # Higher = better quality处理速度慢
降低DPI以加快处理速度:
pdf2img -i document.pdf -o ./output -d 96许可证
该项目使用Apache 2.0许可证下的go-pdfium。
贡献
欢迎捐款。拜托:
- 分叉项目
- 为您的功能创建分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
路线图
- \[\]水印支持
- \[\]渲染图像的OCR
- \[\]并行页面处理
- \[\]渲染图像缓存
- \[\]REST HTTP API
- \[\]密码保护的PDF支持
