如何在 Go 中加载文档
Aspose.PDF FOSS for Go 从文件路径、io.Reader 或受密码保护的任一来源加载 PDF,始终返回一个可用于操作的 *Document 值。该库是通过 go get 安装的 Go 模块。
分步指南
步骤 1:安装软件包
将模块添加到你的项目中:
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go验证模块已解析:
import asposepdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"步骤 2:导入所需类
import (
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)步骤 3:从文件路径加载 PDF
pdf.Open 加载 PDF 文件并返回一个 *Document 和一个错误:
doc, err := pdf.Open("testdata/4pages.pdf")
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount(), "pages")步骤 4:加载受密码保护的 PDF
pdf.OpenWithPassword 打开一个使用用户密码加密的文件:
doc, err := pdf.OpenWithPassword("locked.pdf", "secret")
if err != nil {
panic(err)
}
fmt.Println("opened:", doc.PageCount(), "pages")步骤 5:从流中加载 PDF
pdf.OpenStream 从任意 io.Reader 读取 PDF —— 网络响应、内存缓冲区或单独打开的文件。pdf.OpenStreamWithPassword 是流的受密码保护等价物:
f, err := os.Open("input.pdf")
if err != nil {
panic(err)
}
defer f.Close()
doc, err := pdf.OpenStream(f)
if err != nil {
panic(err)
}
fmt.Println(doc.PageCount(), "pages")
// For an encrypted stream, open a separate reader and pass a password:
f2, _ := os.Open("locked.pdf")
defer f2.Close()
doc2, err := pdf.OpenStreamWithPassword(f2, "secret")
if err != nil {
panic(err)
}
fmt.Println(doc2.PageCount(), "pages (encrypted)")步骤 6:检查已加载的文档
加载完成后,Document.PageCount 会报告总页数,而 Document.Page(n) 则通过基于 1 的索引检索单页:
doc, err := pdf.Open("testdata/4pages.pdf")
if err != nil {
panic(err)
}
fmt.Printf("Page count: %d\n", doc.PageCount())
page, err := doc.Page(1)
if err != nil {
panic(err)
}
size, err := page.Size()
if err != nil {
panic(err)
}
fmt.Printf("Page 1 size: %.0f x %.0f pt\n", size.Width, size.Height)常见问题与解决方案
OpenWithPassword 在我输入我认为正确的密码后仍然失败
向 OpenWithPassword 提供错误的密码会导致非 nil 错误。密码区分大小写——请确认源 PDF 上设置的用户密码完全一致。
OpenStream 在加密的 PDF 上返回错误
OpenStream 无法打开加密的 PDF。请改用 OpenStreamWithPassword 来处理受密码保护的流。
我需要 OpenWithPassword 对于实际上未加密的 PDF 吗?
不 — 通过 OpenWithPassword 打开未加密的文件是被允许的,行为与普通的 Open 调用相同,所以当不确定文件是否加密时,使用 OpenWithPassword 是安全的。
Document.Page(n) 在成功之后返回错误 Open
页码超出范围。Page 使用 1 开始的索引,范围在 1 到 Document.PageCount() 之间;请先调用 PageCount() 以验证范围。
常见问题
我可以使用 Open 加载哪些文件格式?
Open、OpenWithPassword、OpenStream 和 OpenStreamWithPassword 均仅接受 PDF 输入。
如何加载已经在内存中的 PDF 而不是磁盘上的?
将字节切片包装在 bytes.Reader 中(满足 io.Reader),并将其传递给 pdf.OpenStream;如果字节表示加密的 PDF,则使用 pdf.OpenStreamWithPassword。
我该如何加载受密码保护的 PDF?
调用 pdf.OpenWithPassword(path, password) 以获取文件路径,或调用 pdf.OpenStreamWithPassword(r, password) 以获取流。
我该如何检查加载了多少页?
对返回的 *Document 调用 Document.PageCount()。