render

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 render 将解析后的 OFD 文档渲染为图形内容。

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
)

字重常量转发,便于本包与调用方继续使用 render.FontRegular 等。

View Source
const BackendCanvas = drawing.BackendCanvas

BackendCanvas 是内置的 tdewolff/canvas 光栅后端名。canvas 实现位于 internal/render/backends/canvas,需空白导入该包注册后方可使用。

Variables

View Source
var (
	RegisterBackend    = drawing.RegisterBackend
	RegisteredBackends = drawing.RegisteredBackends
)

RegisterBackend / RegisteredBackends 转发到 drawing 包的注册表。插件包在 自己的 init() 里注册,例:

import _ "github.com/zc310/ofd/internal/render/backends/canvas"  // 内置 canvas
import _ "github.com/zc310/ofd/internal/render/backends/gg"      // gogpu/gg

只有显式导入后端的二进制才会包含对应实现。

Functions

func FallbackFontData added in v0.1.2

func FallbackFontData(family string) ([]byte, bool)

FallbackFontData 返回已全局注册回退字体族的首个来源数据。

func RegisterFallbackFont added in v0.1.2

func RegisterFallbackFont(data []byte, family string, style FontStyle) error

RegisterFallbackFont 在进程内全局注册回退字体;需已导入字体引擎实现。

func RegisterFallbackFontFactory added in v0.1.3

func RegisterFallbackFontFactory(register func(data []byte, family string, style FontStyle) error, data func(family string) ([]byte, bool))

RegisterFallbackFontFactory 注册回退字体的全局注册/查询实现。

func RegisterFontEngineFactory added in v0.1.3

func RegisterFontEngineFactory(fn func(doc *parser.Document) FontEngine)

RegisterFontEngineFactory 注册字体引擎工厂,供 canvas 后端注册或测试注入。

func RegisterOffscreenSurfaceFactory added in v0.1.3

func RegisterOffscreenSurfaceFactory(fn func(width, height float64, resolution geom.Resolution) OffscreenSurface)

RegisterOffscreenSurfaceFactory 注册离屏表面工厂,供 canvas 后端注册或测试注入。

func RegisterPDFDocumentFactory added in v0.1.3

func RegisterPDFDocumentFactory(fn func(w io.Writer, options PDFOptions) (PDFDocument, error))

RegisterPDFDocumentFactory 注册 PDF 文档写入器,供 canvas 后端注册或测试注入。

func RegisterSVGSceneFactory added in v0.1.3

func RegisterSVGSceneFactory(fn func(data []byte) (SVGScene, error))

RegisterSVGSceneFactory 注册 SVG 场景解析器,供 canvas 后端注册或测试注入。

func RegisterVectorSurfaceFactory added in v0.1.3

func RegisterVectorSurfaceFactory(fn func(width, height float64, draw func(DrawContext)) VectorSurface)

RegisterVectorSurfaceFactory 注册矢量表面工厂,供 canvas 后端注册或测试注入。

Types

type Backend added in v0.1.3

type Backend = drawing.Backend

Backend 是后端契约的别名:契约定义在与绘制库无关的 drawing 包,插件后端 (gg/ftgg/tinyskia/draw2d)直接依赖 drawing,不必依赖 render/canvas。

func NewBackend added in v0.1.3

func NewBackend(name string, width, height float64, resolution geom.Resolution) (Backend, error)

NewBackend 创建页面栅格化后端。

name 为后端标识;各后端(含内置的 BackendCanvas)都需先空白导入对应插件 包来注册(见 RegisterBackend)。width/height 是页面物理尺寸(mm), resolution 是输出分辨率(geom.DPI / geom.DPMM)。

type BackendFactory added in v0.1.3

type BackendFactory = drawing.BackendFactory

BackendFactory 是 drawing.BackendFactory 的别名:创建后端实例,由各后端 插件包通过 RegisterBackend 注册。width/height 为页面物理尺寸(mm), resolution 为输出分辨率(geom.Resolution,与绘制库无关)。

type CTColor

type CTColor = drawing.CTColor

CTColor 定义在 drawing 包;这里用别名保持本包既有调用点(updateCtColor 等)可用。

type Document

type Document struct {
	*parser.Document
	// contains filtered or unexported fields
}

func NewDocument

func NewDocument(background color.Color, doc *parser.Document) *Document

func NewDocumentWithDPI added in v0.1.1

func NewDocumentWithDPI(background color.Color, doc *parser.Document, dpi geom.Resolution) *Document

NewDocumentWithDPI 创建带有输出分辨率的渲染文档。 dpi 用于复合图元等内部离屏栅格化,不改变页面的物理尺寸。

func (*Document) Annot

func (p *Document) Annot(ctx DrawContext, annot *models.Annot, pb models.StBox)

func (*Document) Composite added in v0.0.5

func (p *Document) Composite(ctx DrawContext, object models.CompositeObject, dp *models.DrawParam, pb models.StBox)

Composite 绘制复合图元(CompositeObject)。

CompositeGraphicUnit 的内容位于自身的 [0,Width]x[0,Height] 坐标系中, 先渲染完整单元,再使用 CompositeObject 的 Boundary 和 CTM 映射到页面, 保留单元内部坐标,不根据透明像素重新裁剪内容。

func (*Document) Draw

func (p *Document) Draw(ctx DrawContext, page *parser.Page) error

func (*Document) FallbackFontFamily added in v0.0.9

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

FallbackFontFamily 返回为文档字体选择的外部字体族。

func (*Document) HasLoadedEmbeddedFont added in v0.0.9

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

HasLoadedEmbeddedFont 判断文档字体是否可以作为内嵌字体族提供给浏览器。

func (*Document) Image

func (p *Document) Image(ctx DrawContext, object models.ImageObject, dp *models.DrawParam, pb models.StBox)

func (*Document) Layer

func (p *Document) Layer(ctx DrawContext, layer *models.Layer, pb models.StBox)

func (*Document) Page

func (p *Document) Page(page *parser.Page) (VectorSurface, error)

func (*Document) PageContent

func (p *Document) PageContent(ctx DrawContext, page *parser.Page, seal bool)

func (*Document) Path

func (p *Document) Path(ctx DrawContext, object models.PathObject, dp *models.DrawParam, pb models.StBox)

func (*Document) RasterizePage added in v0.1.3

func (p *Document) RasterizePage(page *parser.Page, backendName string, resolution geom.Resolution) (*image.RGBA, error)

RasterizePage 把指定页面栅格化为 RGBA 图像。backendName 选用渲染后端 (BackendCanvas 需空白导入 internal/render/backends/canvas;其它后端见 drawing.Backend*,需导入对应插件包);resolution 决定输出图片的像素密度。

func (*Document) RemoveFallbackFont added in v0.1.3

func (p *Document) RemoveFallbackFont(family string)

RemoveFallbackFont 取消先前通过 UseFallbackFont 登记的回退字体族,使缺失字体 恢复为内嵌或默认字体。

func (*Document) Seal

func (p *Document) Seal(ctx DrawContext, info *parser.SealInfo, pb models.StBox) error

func (*Document) Template

func (p *Document) Template(ctx DrawContext, template models.Template, pb models.StBox)

func (*Document) Text

func (p *Document) Text(ctx DrawContext, object models.TextObject, dp *models.DrawParam, pb models.StBox)

func (*Document) TextLayouts added in v0.0.9

func (p *Document) TextLayouts(page *parser.Page) []TextLayout

TextLayouts 返回页面文字的字符级布局。字符步进使用渲染器的字体度量、 DeltaX/DeltaY、ReadDirection 和 CTM 基础计算,避免网页字体度量造成高亮偏移。

func (*Document) UseFallbackFont added in v0.1.2

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

UseFallbackFont 使当前文档缺失字体时使用已全局注册的回退字体族。

type DrawContext added in v0.1.3

type DrawContext = drawing.DrawContext

DrawContext 是 drawing.DrawContext 的别名,保持本包既有调用点可用。契约 定义在 drawing 包,使后端插件只依赖 drawing/geom,不依赖 render/canvas。

type EncodedImage added in v0.1.3

type EncodedImage struct {
	Format string // "jpeg" 或 "png"
	Data   []byte
	// contains filtered or unexported fields
}

EncodedImage 是保留原始编码字节的懒解码图片:以标准 image.Image 暴露, 首次访问时才解码;同时保留编码数据,供 canvas PDF 写入器等按原字节内嵌。 它与绘制库无关;canvas 适配层可把编码数据再包装成 canvas/image.Image。

func NewEncodedImage added in v0.1.3

func NewEncodedImage(format string, data []byte) *EncodedImage

NewEncodedImage 返回保留编码数据的懒解码图片(导出供 canvas 等后端或测试使用)。

func (*EncodedImage) At added in v0.1.3

func (e *EncodedImage) At(x, y int) color.Color

At 返回像素颜色(会触发解码)。

func (*EncodedImage) Bounds added in v0.1.3

func (e *EncodedImage) Bounds() image.Rectangle

Bounds 返回图片边界。只读取图片头(DecodeConfig)获取尺寸,不触发完整解码。

func (*EncodedImage) CanvasCached added in v0.1.3

func (e *EncodedImage) CanvasCached() any

canvasCached 返回 canvas 适配层缓存的对象(供 canvas_backend.go 使用)。

func (*EncodedImage) ColorModel added in v0.1.3

func (e *EncodedImage) ColorModel() color.Model

ColorModel 返回颜色模型。只读取图片头,不触发完整解码。

func (*EncodedImage) Image added in v0.1.3

func (e *EncodedImage) Image() (image.Image, error)

Image 解码并返回底层原生图像,结果会缓存。它同时满足各后端用于“延迟解码 包装器”的最小接口(Image() (image.Image, error))。

func (*EncodedImage) SetCanvasCached added in v0.1.3

func (e *EncodedImage) SetCanvasCached(v any)

setCanvasCached 缓存 canvas 适配层构造的对象。

func (*EncodedImage) Weight added in v0.1.3

func (e *EncodedImage) Weight() int64

weight 估算该图片在缓存中的内存占用:编码字节 + 解码后的像素。只读取 图片头(DecodeConfig)获取尺寸与颜色模型,不触发完整解码。

type FontEngine added in v0.1.3

type FontEngine = drawing.FontEngine

字体相关契约定义在 drawing 包,render 通过别名保持既有调用点可用。

func NewFontEngine added in v0.1.3

func NewFontEngine(doc *parser.Document) FontEngine

NewFontEngine 按已注册工厂创建字体引擎;未注册时返回 nil。

type FontFace added in v0.1.3

type FontFace = drawing.FontFace

字体相关契约定义在 drawing 包,render 通过别名保持既有调用点可用。

type FontFamily added in v0.1.3

type FontFamily = drawing.FontFamily

字体相关契约定义在 drawing 包,render 通过别名保持既有调用点可用。

type FontStyle added in v0.1.3

type FontStyle = drawing.FontStyle

字体相关契约定义在 drawing 包,render 通过别名保持既有调用点可用。

type GlyphLayout added in v0.0.9

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

GlyphLayout 描述一个文字字符在页面上的近似区域。坐标单位为毫米, 使用页面左上角作为原点。

type OffscreenSurface added in v0.1.3

type OffscreenSurface interface {
	DrawContext
	// Raster 返回离屏内容对应的 RGBA 图像。
	Raster() *image.RGBA
}

OffscreenSurface 是离屏栅格表面:绘制完成后取回 RGBA。用于网格渐变、复合 单元、图片掩码等需要先在独立画布上绘制再贴回的场景。

type PDFDocument added in v0.1.3

type PDFDocument = drawing.PDFDocument

矢量输出契约定义在 drawing 包,render 通过别名保持既有调用点可用。

func NewPDFDocument added in v0.1.3

func NewPDFDocument(w io.Writer, options PDFOptions) (PDFDocument, error)

NewPDFDocument 创建 PDF 文档;未注册写入器时返回错误。

type PDFOptions added in v0.1.3

type PDFOptions = drawing.PDFOptions

矢量输出契约定义在 drawing 包,render 通过别名保持既有调用点可用。

type SVGScene added in v0.1.3

type SVGScene = drawing.SVGScene

SVGScene 定义在 drawing 包,render 通过别名保持既有调用点可用。

type TextLayout added in v0.0.9

type TextLayout struct {
	Text          string
	X             float64
	Y             float64
	Width         float64
	Height        float64
	Font          uint64
	Size          float64
	Weight        int
	ReadDirection int
	CharDirection int
	Bold          bool
	Italic        bool
	Glyphs        []GlyphLayout
}

TextLayout 描述一个 TextCode 及其字符级几何信息。

type TextRun added in v0.1.3

type TextRun = drawing.TextRun

字体相关契约定义在 drawing 包,render 通过别名保持既有调用点可用。

type VectorSurface added in v0.1.3

type VectorSurface = drawing.VectorSurface

矢量输出契约定义在 drawing 包,render 通过别名保持既有调用点可用。

Directories

Path Synopsis
backends
canvas
Package canvas 提供 tdewolff/canvas 的 render 后端实现:DrawContext (canvasBackend)、矢量表面与 PDF 写入器(VectorSurface/PDFDocument)、 SVG 场景、离屏栅格表面、内置栅格后端(BackendCanvas),以及默认字体引擎 (Fonts)。
Package canvas 提供 tdewolff/canvas 的 render 后端实现:DrawContext (canvasBackend)、矢量表面与 PDF 写入器(VectorSurface/PDFDocument)、 SVG 场景、离屏栅格表面、内置栅格后端(BackendCanvas),以及默认字体引擎 (Fonts)。
canvas/canvasconv
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 矢量输出)以及迁移期的适配层使用。
draw2d
Package draw2d 提供基于 github.com/llgcode/draw2d 的页面栅格化后端,通过 空白导入注册到 internal/render 的注册表:
Package draw2d 提供基于 github.com/llgcode/draw2d 的页面栅格化后端,通过 空白导入注册到 internal/render 的注册表:
fgg
Package fgg 提供基于 fogleman/gg 的页面栅格化后端(fogleman API + freetype/raster,FloatTech/gg 的上游原版),通过空白导入注册到 internal/render 的注册表(Go image 包风格):
Package fgg 提供基于 fogleman/gg 的页面栅格化后端(fogleman API + freetype/raster,FloatTech/gg 的上游原版),通过空白导入注册到 internal/render 的注册表(Go image 包风格):
ftgg
Package ftgg 提供基于 FloatTech/gg 的页面栅格化后端(fogleman API + freetype/raster),通过空白导入注册到 internal/render 的注册表(Go image 包风格):
Package ftgg 提供基于 FloatTech/gg 的页面栅格化后端(fogleman API + freetype/raster),通过空白导入注册到 internal/render 的注册表(Go image 包风格):
gg
Package gg 提供基于 gogpu/gg 的页面栅格化后端,通过空白导入注册到 internal/render 的注册表:
Package gg 提供基于 gogpu/gg 的页面栅格化后端,通过空白导入注册到 internal/render 的注册表:
rastercore
Package rastercore 提供可切换栅格后端共用的渲染上下文状态机。
Package rastercore 提供可切换栅格后端共用的渲染上下文状态机。
rasterstate
Package rasterstate 提供栅格后端 Push/Pop 时需要镜像保存/恢复的样式 状态容器。
Package rasterstate 提供栅格后端 Push/Pop 时需要镜像保存/恢复的样式 状态容器。
tinyskia
Package tinyskia 提供基于 tiny-skia 纯 Go 移植(Canvas 2D API)的页面 栅格化后端,通过空白导入注册到 internal/render 的注册表:
Package tinyskia 提供基于 tiny-skia 纯 Go 移植(Canvas 2D API)的页面 栅格化后端,通过空白导入注册到 internal/render 的注册表:
Package drawing 定义与具体绘制库无关的绘制后端契约、注册表,以及 render 核心与各实现包共享的公共契约类型(字体、矢量输出、SVG 场景等)。
Package drawing 定义与具体绘制库无关的绘制后端契约、注册表,以及 render 核心与各实现包共享的公共契约类型(字体、矢量输出、SVG 场景等)。
Package geom 是与具体绘制库无关的二维几何与渐变引擎,供 internal/render 及其各绘制后端(canvas/gg/ftgg/tinyskia)共用。
Package geom 是与具体绘制库无关的二维几何与渐变引擎,供 internal/render 及其各绘制后端(canvas/gg/ftgg/tinyskia)共用。
Package testscene 提供后端一致性测试共用的“页面场景”与配套图元/度量: 同一段 DrawContext 绘制命令可依次作用到不同光栅后端,用于逐像素对照 与速度测试。
Package testscene 提供后端一致性测试共用的“页面场景”与配套图元/度量: 同一段 DrawContext 绘制命令可依次作用到不同光栅后端,用于逐像素对照 与速度测试。

Jump to

Keyboard shortcuts

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