Files
ofdgo/README.md
T
2026-09-15 10:07:25 +08:00

154 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OFDGo [![PkgGoDev](https://pkg.go.dev/badge/github.com/xiaoqidun/ofdgo)](https://pkg.go.dev/github.com/xiaoqidun/ofdgo)
首个原生、全平台兼容的纯 Go 语言 OFD 读写库
# 在线体验
[OFDGo WebUI](https://ofdgo.aite.me/),将OFDGo编译为WASM提供服务
# 一键部署
```shell
docker run -d -p 80:80 ccr.ccs.tencentyun.com/xiaoqidun/ofdgo:latest
```
# 构建指南
```batch
:: 1. 编译OFDGo WASM
set GOOS=js
set GOARCH=wasm
go build -o assets/webui/ofdgo.wasm -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/wasm.go
:: 2. 编译OFDGo WebUI
set GOOS=windows
set GOARCH=amd64
go build -o ofdgo_webui.exe -trimpath -ldflags "-s -w -buildid=" ./cmd/webui/webui.go
```
# 安装为库
```shell
go get -u github.com/xiaoqidun/ofdgo
```
# 渲染输出
```go
package main
import (
"log"
"os"
"github.com/xiaoqidun/ofdgo"
)
func main() {
// 1. 打开OFD文件
reader, err := ofdgo.Open("test.ofd")
if err != nil {
log.Fatal(err)
}
defer reader.Close()
// 2. 创建PDF文件
pdfFile, err := os.Create("test.pdf")
if err != nil {
log.Fatal(err)
}
defer pdfFile.Close()
// 3. 渲染PDF文件
renderer := ofdgo.NewRenderer(reader)
if err := renderer.RenderToMultiPagePDF(pdfFile); err != nil {
log.Fatal(err)
}
}
```
# 签名验证
```go
package main
import (
"log"
"os"
"github.com/xiaoqidun/ofdgo"
)
func main() {
// 1. 打开OFD文件
data, err := os.ReadFile("test.ofd")
if err != nil {
log.Fatal(err)
}
// 2. 验证OFD签名
reports, err := ofdgo.VerifySignaturesBytes(data)
if err != nil {
log.Fatal(err)
}
// 3. 判断验证结果
if len(reports) == 0 {
log.Println("文件未发现签名")
return
}
valid := true
for _, report := range reports {
if report.IntegrityValid() {
log.Printf("签名%s验证通过", report.ID)
continue
}
valid = false
if report.Error == "" {
log.Printf("签名%s验证失败", report.ID)
} else {
log.Printf("签名%s验证失败: %s", report.ID, report.Error)
}
}
if !valid {
os.Exit(1)
}
}
```
# 创建文档
```go
package main
import (
"log"
"os"
"github.com/xiaoqidun/ofdgo"
)
func main() {
// 1. 创建文档
editor := ofdgo.NewEditor()
editor.Info.Title = "示例文档"
page, err := editor.AddPage(210, 297)
if err != nil {
log.Fatal(err)
}
// 2. 添加文字
fontData, err := os.ReadFile("font.ttf")
if err != nil {
log.Fatal(err)
}
fontID, err := editor.AddFont(ofdgo.FontFile{Data: fontData}, 0)
if err != nil {
log.Fatal(err)
}
_, err = editor.AddText(page, ofdgo.Box{X: 20, Y: 20, W: 170, H: 15}, "你好,OFDGo!", fontID, 6)
if err != nil {
log.Fatal(err)
}
// 3. 保存文档
ofdFile, err := os.Create("test.ofd")
if err != nil {
log.Fatal(err)
}
defer ofdFile.Close()
if _, err := editor.WriteTo(ofdFile); err != nil {
log.Fatal(err)
}
}
```
# 授权协议
本项目使用 [Apache License 2.0](https://github.com/xiaoqidun/ofdgo/blob/main/LICENSE) 授权协议