Help us shape the future of Go! Take the 2026 Go Developer Survey

canvas

package
v0.1.5 Latest Latest
Warning

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

Go to latest
Published: Oct 21, 2026 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Overview

Package canvas 提供 tdewolff/canvas 的 render 后端实现:DrawContext (canvasBackend)、矢量表面与 PDF 写入器(VectorSurface/PDFDocument)、 SVG 场景、离屏栅格表面、内置栅格后端(BackendCanvas),以及默认字体引擎 (Fonts)。

空白导入本包即可注册上述能力:

import _ "github.com/zc310/ofd/internal/render/backends/canvas"

Index

Constants

View Source
const (
	FontRegular    = drawing.FontRegular
	FontThin       = drawing.FontThin
	FontExtraLight = drawing.FontExtraLight
	FontLight      = drawing.FontLight
	FontMedium     = drawing.FontMedium
	FontSemiBold   = drawing.FontSemiBold
	FontBold       = drawing.FontBold
	FontExtraBold  = drawing.FontExtraBold
	FontBlack      = drawing.FontBlack
	FontItalic     = drawing.FontItalic
)

Variables

This section is empty.

Functions

func UnregisterFallbackFont added in v0.1.5

func UnregisterFallbackFont(family string) error

UnregisterFallbackFont 声明某个字体族不再需要,释放其字节。

仍被打开的文档引用着它时不会立即删除,而是等最后一个文档放手——那些文档 还要用它渲染,提前释放会出问题。因此界面上的"删除"对已打开的文档是延迟 生效的,这是有意的。

Types

type CTColor

type CTColor = drawing.CTColor

字体样式常量与类型的本地别名,便于包内代码与测试直接引用。

type FontFace

type FontFace = drawing.FontFace

字体样式常量与类型的本地别名,便于包内代码与测试直接引用。

type FontFamily

type FontFamily = drawing.FontFamily

字体样式常量与类型的本地别名,便于包内代码与测试直接引用。

type FontStyle

type FontStyle = drawing.FontStyle

字体样式常量与类型的本地别名,便于包内代码与测试直接引用。

type Fonts

type Fonts struct {
	*parser.Document

	Fonts map[models.StRefID]*canvas.FontFamily
	// contains filtered or unexported fields
}

Fonts embeddedFonts/embeddedRepairers 按文档(Fonts 实例)持有内嵌字体解析结果, 随文档关闭一并释放。内嵌字体是文档自带资源,跨文档复用价值有限,却会因全局 缓存长期钉住重资源,因此不放在包级缓存里。

func NewFonts

func NewFonts(doc *parser.Document) *Fonts

func (*Fonts) CacheGeneration added in v0.1.5

func (p *Fonts) CacheGeneration() uint64

CacheGeneration 返回当前字形映射与回退字体集合的版本号。

func (*Fonts) Close added in v0.1.4

func (p *Fonts) Close()

Close 释放本实例持有的全部字体族引用。

字体族很重(一个 CJK 字体约 50 MB:文件字节只占五分之一,其余是解码后的 字形轮廓),而渲染文档通常只在打开期间需要它们。文档关闭后若不释放,引用 计数降不到 0,包级缓存就永远留着这份轮廓;WASM 侧浏览多个文档时这些内存 会累积,而线性内存不归还给宿主。

幂等:重复调用不会重复释放。

func (*Fonts) FaceObject

func (p *Fonts) FaceObject(family drawing.FontFamily, object models.TextObject, fill *drawing.CTColor) drawing.FontFace

FaceObject 为字体族与文字对象创建一个中性字体面。fill 为文字填充色/渐变。

选中的字体族画不出对象里的某些字符时(例如 sans-serif 被 fontconfig 解析成 Latin-only 的 DejaVu Sans,而正文是中文),换一个真能画出来的系统字体。 FontFamily 没有逐字形回退,同一 style 再载入字体只会覆盖前一个,因此只能 整族替换。渲染与文字层度量都经由本函数,替换决策一致,不会出现「按 A 字体 度量、按 B 字体绘制」导致的文字层错位。

func (*Fonts) FallbackFontFamily

func (p *Fonts) FallbackFontFamily(id models.StRefID) string

FallbackFontFamily 返回为文档字体选择的外部字体族。 必须先调用 LoadFont;TextLayouts 和 Text 会自动完成这一步。

func (*Fonts) HasLoadedEmbeddedFont

func (p *Fonts) HasLoadedEmbeddedFont(id models.StRefID) bool

HasLoadedEmbeddedFont 判断文档字体是否解析为可用且已加载的字体族。 仅声明 FontFile 并不够,因为文件可能缺失、格式错误或被字体解析器拒绝。

func (*Fonts) LoadFont

func (p *Fonts) LoadFont(id models.StRefID) (drawing.FontFamily, error)

func (*Fonts) RegisterGlyphs

func (p *Fonts) RegisterGlyphs(id models.StRefID, pairs map[rune]uint16)

RegisterGlyphs 登记某个字体的 Unicode→字形映射。新增或变更映射时会作废该 字体已加载的族,使后续 LoadFont 用完整映射重建,保证渲染使用原始文本。

func (*Fonts) RegisterPageGlyphs

func (p *Fonts) RegisterPageGlyphs(doc *parser.Document, page *parser.Page, content *models.PageContent)

RegisterPageGlyphs 收集页面(含模板与注释)的字形映射。命中扫描缓存后仍登记 映射,保证其他页面更新同一字符的字形后,重绘本页能恢复对应映射。

func (*Fonts) RemoveFallbackFont

func (p *Fonts) RemoveFallbackFont(family string)

RemoveFallbackFont 移除本字体上下文先前通过 UseFallbackFont 登记的回退字体族, 使缺失字体不再回退到该族。全局注册表不回滚,但本上下文的回退集合与解析缓存会 重建,后续渲染即恢复为内嵌或默认字体。

func (*Fonts) RenderLock

func (p *Fonts) RenderLock(handle drawing.FontFamily) *sync.Mutex

func (*Fonts) UseFallbackFont

func (p *Fonts) UseFallbackFont(family string) error

type TextRun

type TextRun = drawing.TextRun

字体样式常量与类型的本地别名,便于包内代码与测试直接引用。

Directories

Path Synopsis
Package canvasconv 提供 internal/render/geom 的中性几何类型与 tdewolff/canvas 类型之间的转换,供 canvas 后端(把 geom 绘制指令转成 canvas.Canvas 用于 Page()/PDF/SVG 矢量输出)以及迁移期的适配层使用。
Package canvasconv 提供 internal/render/geom 的中性几何类型与 tdewolff/canvas 类型之间的转换,供 canvas 后端(把 geom 绘制指令转成 canvas.Canvas 用于 Page()/PDF/SVG 矢量输出)以及迁移期的适配层使用。

Jump to

Keyboard shortcuts

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