webreader

package
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2026 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Overview

Package webreader 包提供适合浏览器调用的 OFD 文档访问接口。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterFallbackFont added in v0.1.2

func RegisterFallbackFont(source FontSource) error

RegisterFallbackFont 在进程内全局注册回退字体,与具体 Reader 无关。 同一字体族只注册一次(幂等)且不复制字体数据;之后可通过 Reader.UseFallbackFont 应用到某个文档。

Types

type AnnotationBoundary added in v0.1.3

type AnnotationBoundary struct {
	X      float64
	Y      float64
	Width  float64
	Height float64
}

AnnotationBoundary 是注解外观的边界框,单位为毫米。

type AnnotationInfo added in v0.1.3

type AnnotationInfo struct {
	Scope int
	// Page 是注解所在页面的全局索引。
	Page int
	// ID 是注解标识。
	ID string
	// Type 是注解类型,如 Link、Highlight、Stamp。
	Type string
	// Subtype 是注解子类型,未声明时为空。
	Subtype string
	// Creator 是创建注解的软件或用户,未声明时为空。
	Creator string
	// LastModDate 是最后修改日期(YYYY-MM-DD),未声明时为空。
	LastModDate string
	// Visible 表示注解是否可见,未声明时为 true。
	Visible bool
	// Remark 是注解备注,未声明时为空。
	Remark string
	// Boundary 是注解外观边界,未声明时为 nil。
	Boundary *AnnotationBoundary
	// URI 是链接注解的外部链接目标,非空时点击打开链接。
	URI string
	// TargetPage 是链接注解的跳转目标页全局索引,-1 表示没有页面目标。
	TargetPage int
	// Dest 是链接注解跳转目标的位置与缩放,nil 表示没有位置信息。
	Dest *OutlineDest
}

AnnotationInfo 描述文档中的一个注解。

type AttachmentInfo added in v0.1.3

type AttachmentInfo struct {
	// Scope 是附件所属文档体的索引。
	Scope int
	// ID 是附件 ID。
	ID string
	// Name 是附件名称。
	Name string
	// Format 是附件格式,未声明时为空。
	Format string
	// Size 是附件声明的字节数,HasSize 为 false 时表示未声明。
	Size    int64
	HasSize bool
	// ActualSize 是附件在包中的实际字节数,0 表示未知或文件不存在。
	ActualSize int64
	// Usage 是附件用途,未声明时为空。
	Usage string
	// Visible 表示附件是否可见,未声明时为 true。
	Visible bool
	// Exists 表示附件文件是否存在于包中。
	Exists bool
}

AttachmentInfo 描述文档中的一个附件,只包含清单元数据。

type Bookmark added in v0.1.3

type Bookmark struct {
	// Name 是书签名称。
	Name string
	// Page 是从 0 开始的目标页索引,-1 表示无法解析。
	Page int
	// Dest 是书签目标的位置与缩放。
	Dest *OutlineDest
}

Bookmark 描述文档书签(命名目标)。

type CertificateDetail added in v0.1.3

type CertificateDetail struct {
	// Slot 是所属层级:印章或外层。
	Slot string
	// SlotKey 是层级的机器可读标识:seal 或 outer,用于导出证书。
	SlotKey string
	// Subject、Issuer 是证书主体与签发者。
	Subject string
	Issuer  string
	// CommonName、Organization、OrganizationalUnit、Country、Locality、Province 是证书主体字段。
	CommonName         string
	Organization       string
	OrganizationalUnit string
	Country            string
	Locality           string
	Province           string
	// SerialNumber 是证书序列号。
	SerialNumber string
	// NotBefore、NotAfter 是证书有效期(RFC3339)。
	NotBefore string
	NotAfter  string
	// PublicKey 是公钥算法名称。
	PublicKey string
	// Algorithm、SignatureFormat 是签名算法与编码格式。
	Algorithm       string
	SignatureFormat string
	// SignatureValid 表示该层签名通过公钥验证。
	SignatureValid bool
	// CertificateValid 表示证书在签名时间点有效。
	CertificateValid bool
	// TrustChecked、Trusted、TrustError 是证书链校验结果。
	TrustChecked bool
	Trusted      bool
	TrustError   string
	// RevocationChecked、RevocationStatus、RevocationError 是吊销校验结果。
	RevocationChecked bool
	RevocationStatus  string
	RevocationError   string
	// Error 是验证失败原因。
	Error string
}

CertificateDetail 描述签名某一层(印章/外层)的证书与验证明细。

type DocumentInfo added in v0.1.1

type DocumentInfo struct {
	DocID        string
	Title        string
	Author       string
	Subject      string
	Abstract     string
	CreationDate string
	ModDate      string
	Creator      string
	Version      string
}

DocumentInfo 描述 OFD 文档的元数据信息。

type DocumentStats added in v0.1.3

type DocumentStats struct {
	// Fonts 是声明字体的数量。
	Fonts int
	// Attachments 是附件数量。
	Attachments int
	// Media 是多媒资资源数量。
	Media int
	// AnnotationPages 是声明了注解的页面数量。
	AnnotationPages int
	// Signatures 是签名数量。
	Signatures int
}

DocumentStats 汇总文档声明的资源数量(不读取资源内容)。

type FontInfo added in v0.1.3

type FontInfo struct {
	// ID 是字体在所属文档内的标识。
	ID uint64
	// Scope 是字体所属文档体的索引,与 ID 一起唯一标识一个字体。
	Scope int
	// Name 是 OFD 声明的字体名称(FontName)。
	Name string
	// Family 是字体族名称(FamilyName),可能为空。
	Family string
	// Bold、Italic 表示字体声明为粗体或斜体。
	Bold   bool
	Italic bool
	// Serif 表示衬线字体,FixedWidth 表示等宽字体。
	Serif      bool
	FixedWidth bool
	// Format 是嵌入字体文件的格式(如 ttf、otf),无嵌入时为空。
	Format string
	// Embedded 表示文档是否内嵌了字体文件。
	Embedded bool
}

FontInfo 描述文档声明的一个字体,不包含嵌入字体数据。

type FontRef added in v0.1.3

type FontRef struct {
	// Scope 是字体所属文档体的索引。
	Scope int
	// ID 是字体在所属文档内的标识。
	ID uint64
}

FontRef 唯一标识一个文档作用域内的字体。

type FontResource

type FontResource struct {
	ID     uint64
	Family string
	Name   string
	Bold   bool
	Italic bool
	Format string
	Data   []byte
}

FontResource 描述文档中可注入浏览器的嵌入字体。 Data 为空表示该字体只声明了名称,没有嵌入字体文件。

type FontSource

type FontSource struct {
	Family string
	Name   string
	Weight int
	Italic bool
	Data   []byte
}

FontSource 是由调用方提供给 WASM 渲染器的字体文件。 浏览器无法读取本机系统字体文件,因此无内嵌字体时应传入可访问的 TTF/OTF Web Font 数据,例如 Google Fonts 的 Noto Sans SC。

type FontUsage added in v0.1.3

type FontUsage struct {
	// Pages 是使用该字体的页面索引,升序排列。
	Pages []int
	// Scanned 是实际扫描的页数。
	Scanned int
	// Truncated 表示因达到扫描页数或结果数量上限而提前结束,结果可能不完整。
	Truncated bool
}

FontUsage 描述某个字体在文档文字中的使用情况。 为避免超大文档长时间扫描,统计页数和结果数量由 FontUsageOptions 限制。

type FontUsageOptions added in v0.1.3

type FontUsageOptions struct {
	// MaxScan 是最多扫描的页数,0 使用默认值 maxFontUsageScan,上限为 maxFontUsageScanHard。
	MaxScan int
	// MaxPages 是每个字体最多返回的页面数,0 使用默认值 maxFontUsagePages,上限为 maxFontUsagePagesHard。
	MaxPages int
}

FontUsageOptions 控制按字体统计使用页面时的扫描上限,零值使用默认值。

type FontUsageReport added in v0.1.3

type FontUsageReport struct {
	// Fonts 按字体 ID 升序排列。
	Fonts []FontUsageSummary
	// Scanned 是实际扫描的页数。
	Scanned int
	// Truncated 表示因扫描页数或单个字体结果数量上限而可能不完整。
	Truncated bool
}

FontUsageReport 是一次批量字体使用统计的结果。

type FontUsageSummary added in v0.1.3

type FontUsageSummary struct {
	// Scope 是字体所属文档体的索引。
	Scope int
	// ID 是字体在所属文档内的标识。
	ID uint64
	// Pages 是使用该字体的页面索引,升序排列,最多 maxFontUsagePages 个。
	Pages []int
}

FontUsageSummary 描述一个字体在文档中的使用页面。

type Glyph

type Glyph struct {
	Text   string
	X      float64
	Y      float64
	Width  float64
	Height float64
	Angle  float64
}

Glyph 描述一个字符的页面区域,坐标单位为毫米。

type MediaInfo added in v0.1.3

type MediaInfo struct {
	// Scope 是资源所属文档体的索引。
	Scope int
	// ID 是多媒体资源标识。
	ID uint64
	// Name 是资源文件名,未解析时为空。
	Name string
	// Type 是多媒体类型,通常为 Image、Audio 或 Video。
	Type string
	// Format 是多媒体格式,未声明时为空。
	Format string
	// Size 是资源在包中的实际字节数,0 表示未知或文件不存在。
	Size int64
	// Exists 表示资源文件是否存在于包中。
	Exists bool
}

MediaInfo 描述文档中的一个多媒体资源(图片/音频/视频),只包含清单元数据。

type OpenOptions

type OpenOptions struct {
	// PageCacheCapacity 是页面缓存最多保留的页面数量,0 表示使用默认值。
	PageCacheCapacity int
	// PageCacheBytes 是页面缓存允许使用的估算最大字节数,0 表示使用默认值。
	PageCacheBytes int64
}

OpenOptions 配置 OFD 打开行为。

type OutlineDest added in v0.1.3

type OutlineDest struct {
	// Type 是目标类型,如 XYZ、Fit、FitH、FitV、FitR。
	Type string
	// Left、Top、Right、Bottom 是目标视图的边界。
	Left   *float64
	Top    *float64
	Right  *float64
	Bottom *float64
	// Zoom 是目标缩放比例。
	Zoom *float64
}

OutlineDest 描述跳转目标的位置与缩放,单位与 OFD 页面坐标一致(毫米)。 字段为 nil 表示文档未指定该值。

type OutlineNode added in v0.1.3

type OutlineNode struct {
	// Title 是大纲项标题。
	Title string
	// Page 是从 0 开始的目标页索引,-1 表示没有可跳转目标。
	Page int
	// URI 是外部链接目标,非空时点击打开链接。
	URI string
	// Dest 是页面跳转目标的位置与缩放,nil 表示没有位置信息。
	Dest *OutlineDest
	// Expanded 是文档声明的是否默认展开子项,nil 表示未声明。
	Expanded *bool
	// Children 是子大纲项。
	Children []OutlineNode
}

OutlineNode 描述文档大纲中的一个节点。

type OutlineTree added in v0.1.3

type OutlineTree struct {
	// PageMode 是文档声明的页面显示模式,例如 UseOutlines;为空表示未声明。
	PageMode string
	// Nodes 是顶层大纲项。
	Nodes []OutlineNode
	// Bookmarks 是文档书签列表。
	Bookmarks []Bookmark
}

OutlineTree 描述文档大纲、书签以及文档声明的打开显示模式。

type PageInfo

type PageInfo struct {
	Index  int
	Width  float64
	Height float64
}

PageInfo 描述一个可渲染页面。尺寸单位为毫米。

type PageLink struct {
	// Scope 是链接所属文档体的索引。
	Scope int
	// Page 是链接所在页面的全局索引。
	Page int
	// ID 是承载链接的图元标识,未声明时为空。
	ID string
	// Boundary 是图元边界(毫米)。
	Boundary AnnotationBoundary
	// URI 是外部链接目标,非空时点击打开链接。
	URI string
	// TargetPage 是跳转目标页全局索引,-1 表示没有页面目标。
	TargetPage int
	// Dest 是跳转目标的位置与缩放,nil 表示没有位置信息。
	Dest *OutlineDest
}

PageLink 描述页面正文图元上的可点击链接。与 AnnotationInfo 中的 Link 注解 不同,这类链接直接挂在页面内容(图层)的文字、路径、图像或复合图元上。

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

Reader 是一个已打开的 OFD 文档。 Reader 负责持有文档资源,使用完毕后必须调用 Close。

func Open

func Open(data []byte) (*Reader, error)

Open 从内存中的 OFD 数据创建浏览器文档引擎。

func OpenWithOptions

func OpenWithOptions(data []byte, options OpenOptions) (*Reader, error)

OpenWithOptions 从内存中的 OFD 数据创建浏览器文档引擎。

func (*Reader) Annotations added in v0.1.3

func (r *Reader) Annotations() ([]AnnotationInfo, error)

Annotations 返回所有页面中的注解,按页面顺序排列。

func (*Reader) AttachmentData added in v0.1.3

func (r *Reader) AttachmentData(scope int, id string, maxBytes int64) ([]byte, error)

AttachmentData 读取指定附件的二进制内容。maxBytes 为 0 时使用默认上限, 超过 maxAttachmentBytesHard 时按硬上限处理。

func (*Reader) Attachments added in v0.1.3

func (r *Reader) Attachments() ([]AttachmentInfo, error)

Attachments 返回所有文档体的附件清单(只读元数据,不读取附件内容)。

func (*Reader) Close

func (r *Reader) Close() error

Close 释放文档资源。Close 可以安全地重复调用。

func (*Reader) FontList added in v0.1.3

func (r *Reader) FontList() ([]FontInfo, error)

FontList 返回文档声明的全部字体(含没有嵌入文件的逻辑字体),不读取字体数据。

func (*Reader) FontUsage added in v0.1.3

func (r *Reader) FontUsage(ref FontRef, options FontUsageOptions) (FontUsage, error)

FontUsage 返回使用指定字体的页面。为避免超大文档长时间扫描,扫描页数和 结果数量由 options 限制;Truncated 表示结果可能不完整。

func (*Reader) FontUsageAll added in v0.1.3

func (r *Reader) FontUsageAll(options FontUsageOptions) (FontUsageReport, error)

FontUsageAll 一次扫描统计所有字体的使用页面,供字体列表批量展示。 扫描页数和单个字体的结果数量由 options 限制。

func (*Reader) Fonts

func (r *Reader) Fonts() ([]FontResource, error)

Fonts 返回文档中声明的字体资源。只有包含 FontFile 的字体会带有 Data, 调用方可以将这些数据交给浏览器 FontFace 构造器进行注入。

func (*Reader) Info added in v0.1.1

func (r *Reader) Info() (DocumentInfo, error)

Info 返回 OFD 文档的元数据信息。

func (*Reader) Media added in v0.1.3

func (r *Reader) Media() ([]MediaInfo, error)

Media 返回所有文档体登记的多媒体资源(只读元数据,不读取资源内容)。

func (*Reader) MediaData added in v0.1.3

func (r *Reader) MediaData(scope int, mediaID uint64, maxBytes int64) ([]byte, error)

MediaData 读取指定多媒体资源的二进制内容。maxBytes 为 0 时使用默认上限, 超过 maxAttachmentBytesHard 时按硬上限处理。

func (*Reader) Outline added in v0.1.3

func (r *Reader) Outline() (OutlineTree, error)

Outline 返回文档大纲树、书签列表以及文档声明的显示模式。 跳转目标按全局页索引解析(跨文档体累加),无法解析的目标为 -1。 没有大纲或书签时返回空切片。

func (*Reader) Page

func (r *Reader) Page(index int) (PageInfo, error)

Page 返回指定页面的真实尺寸信息。 与 Pages 不同,查询单页信息会按需加载该页完整内容。

func (*Reader) PageCount

func (r *Reader) PageCount() int

PageCount 返回文档的总页数,页码从 0 开始。

func (r *Reader) PageLinks() ([]PageLink, error)

PageLinks 返回页面正文图元(图层)上的可点击链接,按页面顺序排列。

func (*Reader) Pages

func (r *Reader) Pages() ([]PageInfo, error)

Pages 返回所有页面的尺寸快照,尺寸单位为毫米。 优先读取页面 XML 中的 Area/PhysicalBox,不加载页面内容或资源。

func (*Reader) Preferences added in v0.1.3

func (r *Reader) Preferences() (ViewPreferences, error)

Preferences 返回文档声明的阅读器显示偏好(取第一个声明了偏好的文档体)。 没有声明时返回零值。

func (*Reader) RemoveFallbackFont added in v0.1.3

func (r *Reader) RemoveFallbackFont(family string) error

RemoveFallbackFont 取消当前文档先前通过 UseFallbackFont 登记的回退字体族, 使缺失字体恢复为内嵌或默认字体。全局字体注册表不回滚,但本 Reader 已解析的 文档与文字/搜索缓存会失效,以便下次渲染使用默认字体。

func (*Reader) RenderPDF

func (r *Reader) RenderPDF(indices []int, options RenderOptions) (outputBytes []byte, err error)

RenderPDF 将多个页面按传入顺序写入一个保留文字和矢量内容的 PDF 文档。 该接口会把完整 PDF 保存在内存中,需要导出大量页面时应使用 RenderPDFTo。

func (*Reader) RenderPDFTo added in v0.1.2

func (r *Reader) RenderPDFTo(output io.Writer, indices []int, options RenderOptions) (err error)

RenderPDFTo 将多个页面按传入顺序写入 output,保留文字和矢量内容。 output 会在 PDF 生成过程中接收数据,适合流式保存大 PDF,因此不限制页数。

func (*Reader) RenderPage

func (r *Reader) RenderPage(index int, options RenderOptions) ([]byte, error)

RenderPage 将指定页面渲染为 PNG、JPG 或 SVG 数据。

func (*Reader) RenderPages

func (r *Reader) RenderPages(indices []int, options RenderOptions) ([][]byte, error)

RenderPages 将多个页面按传入顺序渲染为 PNG、JPG 或 SVG 数据。 所有页面共享一次 Reader 锁和同一份文档状态;渲染本身仍按顺序执行。

func (*Reader) Search

func (r *Reader) Search(query string) ([]SearchResult, error)

Search 在所有页面的文字对象中查找 query,匹配不区分大小写。

func (*Reader) SignatureCertificate added in v0.1.3

func (r *Reader) SignatureCertificate(scope int, signatureID string, slot string) ([]byte, error)

SignatureCertificate 返回指定签名某一层(seal/outer)证书的 DER 内容。

func (*Reader) SignatureSeal added in v0.1.3

func (r *Reader) SignatureSeal(scope int, signatureID string, stampIndex int) ([]byte, string, error)

SignatureSeal 返回指定签名第 stampIndex 个签章的印章文件内容与类型。

func (*Reader) SignatureValue added in v0.1.3

func (r *Reader) SignatureValue(scope int, signatureID string) ([]byte, error)

SignatureValue 返回指定签名的签名值(SignedValue.dat)内容。

func (*Reader) Signatures added in v0.1.3

func (r *Reader) Signatures() ([]SignatureInfo, error)

Signatures 返回所有文档体的签名及其摘要/验签结果。

func (*Reader) Stats added in v0.1.3

func (r *Reader) Stats() (DocumentStats, error)

Stats 汇总文档声明的资源数量,只读取声明,不加载资源内容。

func (*Reader) Text

func (r *Reader) Text(index int) ([]TextRun, error)

Text 返回指定页面的文字对象快照。文字顺序与 OFD 页面绘制顺序一致。

func (*Reader) UseFallbackFont added in v0.1.2

func (r *Reader) UseFallbackFont(family string) error

UseFallbackFont 使当前文档缺失字体时使用已全局注册的回退字体族。 该字体族必须先通过 RegisterFallbackFont 注册。文字和搜索快照会失效, 因为它们的字形度量可能使用了不同的回退字体。

type Rect

type Rect struct {
	X      float64
	Y      float64
	Width  float64
	Height float64
	Angle  float64
}

Rect 描述一个搜索命中的字符区域,坐标单位为毫米。

type RenderFormat added in v0.1.1

type RenderFormat string

RenderFormat 是页面输出格式。

const (
	// RenderPNG 输出 PNG 位图。为空时也使用该格式。
	RenderPNG RenderFormat = "png"
	// RenderSVG 输出 SVG 矢量文档。
	RenderSVG RenderFormat = "svg"
	// RenderJPG 输出 JPG 位图。JPG 不支持透明度,透明区域使用白色填充。
	RenderJPG RenderFormat = "jpg"
)

type RenderOptions

type RenderOptions struct {
	DPI        float64
	Background color.Color
	Format     RenderFormat
}

RenderOptions 控制页面输出。DPI 控制 PNG、JPG 以及 PDF 中复杂效果的内部栅格化分辨率; PDF 页面主体保留文字和矢量内容,SVG 复杂渐变等仍可能包含栅格回退。

type SearchResult

type SearchResult struct {
	Page  int
	Run   int
	Text  string
	Start int
	End   int
	Rects []Rect
}

SearchResult 描述一个页面文字命中。

type SignatureInfo added in v0.1.3

type SignatureInfo struct {
	// Scope 是签名所属文档体的索引。
	Scope int
	// ID 是签名标识。
	ID string
	// Provider、Company、Version 是签名提供者信息。
	Provider string
	Company  string
	Version  string
	// Method 是签名算法标识(通常是 OID),未声明时为空。
	Method string
	// Date 是签名时间,保留原始文本。
	Date string
	// HasDigest、DigestValid 和 DigestMethod 是摘要校验结果。
	HasDigest    bool
	DigestValid  bool
	DigestMethod string
	// HasVerification、Verified、Trusted、TrustChecked 是验签结果。
	HasVerification bool
	Verified        bool
	Trusted         bool
	TrustChecked    bool
	// VerificationError 是验签错误信息,无错误时为空。
	VerificationError string
	// Stamps 是签名关联的签章位置。
	Stamps []SignatureStamp
	// Certificates 是印章与外层两层的证书与验证明细。
	Certificates []CertificateDetail
	// References 是签名覆盖的文件引用及逐项摘要校验结果。
	References []SignatureReference
	// HasDataHash、DataHashMatch 是签名数据摘要(Signature.xml)校验结果。
	HasDataHash   bool
	DataHashMatch bool
}

SignatureInfo 描述文档中的一个签名及其校验结果。

type SignatureReference added in v0.1.3

type SignatureReference struct {
	// FileRef 是签名中声明的文件引用路径。
	FileRef string
	// Exists 表示引用的文件是否存在于包中。
	Exists bool
	// Match 表示摘要是否一致。
	Match bool
	// Error 是校验失败原因。
	Error string
}

SignatureReference 描述签名覆盖的一个文件引用及其摘要校验结果。

type SignatureStamp added in v0.1.3

type SignatureStamp struct {
	// Page 是签章所在页面的全局索引,-1 表示无法解析。
	Page int
	// ID 是签章标识。
	ID string
	// Boundary 是签章边界(毫米),未声明时为 nil。
	Boundary *AnnotationBoundary
	// HasSeal 表示是否提取到印章数据。
	HasSeal bool
	// SealType 是印章文件类型(如 png、jpg、ofd),无印章时为空。
	SealType string
}

SignatureStamp 描述签名关联的一个签章位置。

type TextRun

type TextRun struct {
	Text   string
	X      float64
	Y      float64
	Width  float64
	Height float64
	// Scope 是文字所属文档体的索引,与 Font 一起唯一标识使用的字体。
	Scope         int
	Font          uint64
	Size          float64
	Weight        int
	ReadDirection int
	CharDirection int
	FontFamily    string
	Bold          bool
	Italic        bool
	Glyphs        []Glyph
}

TextRun 描述页面中的一个文字对象。坐标和尺寸单位为毫米。 X/Y 是网页覆盖层使用的左上角坐标,不是 TextCode 的基线坐标。

type ViewPreferences added in v0.1.3

type ViewPreferences struct {
	// PageLayout 是文档声明的页面布局方式,如 OneColumn、TwoPageL、TwoPageR。
	PageLayout string
	// ZoomMode 是文档声明的缩放模式,如 FitWidth、FitHeight、FitRect。
	ZoomMode string
	// Zoom 是文档声明的自定义缩放比例。
	Zoom *float64
}

ViewPreferences 描述文档声明的阅读器显示偏好。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL