Documentation
¶
Overview ¶
Package render 将解析后的 OFD 文档渲染为图形内容。
Index ¶
- Constants
- Variables
- func FallbackFontData(family string) ([]byte, bool)
- func RegisterFallbackFont(data []byte, family string, style FontStyle) error
- func RegisterFallbackFontFactory(register func(data []byte, family string, style FontStyle) error, ...)
- func RegisterFontEngineFactory(fn func(doc *parser.Document) FontEngine)
- func RegisterOffscreenSurfaceFactory(fn func(width, height float64, resolution geom.Resolution) OffscreenSurface)
- func RegisterPDFDocumentFactory(fn func(w io.Writer, options PDFOptions) (PDFDocument, error))
- func RegisterSVGSceneFactory(fn func(data []byte) (SVGScene, error))
- func RegisterVectorSurfaceFactory(fn func(width, height float64, draw func(DrawContext)) VectorSurface)
- type Backend
- type BackendFactory
- type CTColor
- type Document
- func (p *Document) Annot(ctx DrawContext, annot *models.Annot, pb models.StBox)
- func (p *Document) Composite(ctx DrawContext, object models.CompositeObject, dp *models.DrawParam, ...)
- func (p *Document) Draw(ctx DrawContext, page *parser.Page) error
- func (p *Document) FallbackFontFamily(id models.StRefID) string
- func (p *Document) HasLoadedEmbeddedFont(id models.StRefID) bool
- func (p *Document) Image(ctx DrawContext, object models.ImageObject, dp *models.DrawParam, ...)
- func (p *Document) Layer(ctx DrawContext, layer *models.Layer, pb models.StBox)
- func (p *Document) Page(page *parser.Page) (VectorSurface, error)
- func (p *Document) PageContent(ctx DrawContext, page *parser.Page, seal bool)
- func (p *Document) Path(ctx DrawContext, object models.PathObject, dp *models.DrawParam, ...)
- func (p *Document) RasterizePage(page *parser.Page, backendName string, resolution geom.Resolution) (*image.RGBA, error)
- func (p *Document) RemoveFallbackFont(family string)
- func (p *Document) Seal(ctx DrawContext, info *parser.SealInfo, pb models.StBox) error
- func (p *Document) Template(ctx DrawContext, template models.Template, pb models.StBox)
- func (p *Document) Text(ctx DrawContext, object models.TextObject, dp *models.DrawParam, ...)
- func (p *Document) TextLayouts(page *parser.Page) []TextLayout
- func (p *Document) UseFallbackFont(family string) error
- type DrawContext
- type EncodedImage
- func (e *EncodedImage) At(x, y int) color.Color
- func (e *EncodedImage) Bounds() image.Rectangle
- func (e *EncodedImage) CanvasCached() any
- func (e *EncodedImage) ColorModel() color.Model
- func (e *EncodedImage) Image() (image.Image, error)
- func (e *EncodedImage) SetCanvasCached(v any)
- func (e *EncodedImage) Weight() int64
- type FontEngine
- type FontFace
- type FontFamily
- type FontStyle
- type GlyphLayout
- type OffscreenSurface
- type PDFDocument
- type PDFOptions
- type SVGScene
- type TextLayout
- type TextRun
- type VectorSurface
Constants ¶
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 等。
const BackendCanvas = drawing.BackendCanvas
BackendCanvas 是内置的 tdewolff/canvas 光栅后端名。canvas 实现位于 internal/render/backends/canvas,需空白导入该包注册后方可使用。
Variables ¶
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
FallbackFontData 返回已全局注册回退字体族的首个来源数据。
func RegisterFallbackFont ¶ added in v0.1.2
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
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
Backend 是后端契约的别名:契约定义在与绘制库无关的 drawing 包,插件后端 (gg/ftgg/tinyskia/draw2d)直接依赖 drawing,不必依赖 render/canvas。
func NewBackend ¶ added in v0.1.3
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 Document ¶
func NewDocumentWithDPI ¶ added in v0.1.1
func NewDocumentWithDPI(background color.Color, doc *parser.Document, dpi geom.Resolution) *Document
NewDocumentWithDPI 创建带有输出分辨率的渲染文档。 dpi 用于复合图元等内部离屏栅格化,不改变页面的物理尺寸。
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) FallbackFontFamily ¶ added in v0.0.9
FallbackFontFamily 返回为文档字体选择的外部字体族。
func (*Document) HasLoadedEmbeddedFont ¶ added in v0.0.9
HasLoadedEmbeddedFont 判断文档字体是否可以作为内嵌字体族提供给浏览器。
func (*Document) Image ¶
func (p *Document) Image(ctx DrawContext, object models.ImageObject, dp *models.DrawParam, pb models.StBox)
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
RemoveFallbackFont 取消先前通过 UseFallbackFont 登记的回退字体族,使缺失字体 恢复为内嵌或默认字体。
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
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 FontFamily ¶ added in v0.1.3
type FontFamily = drawing.FontFamily
字体相关契约定义在 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 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 VectorSurface ¶ added in v0.1.3
type VectorSurface = drawing.VectorSurface
矢量输出契约定义在 drawing 包,render 通过别名保持既有调用点可用。
Source Files
¶
- backend.go
- color_space.go
- ctcolor.go
- document.go
- document_composite.go
- document_gradient.go
- document_gradient_mesh.go
- document_gradient_shading.go
- document_image.go
- document_path.go
- document_pattern.go
- document_seal.go
- document_style.go
- document_text.go
- document_text_layout.go
- fontengine.go
- gradient_transform.go
- image_lazy.go
- lru.go
- offscreen.go
- register.go
- renderctx.go
- svg.go
- textface.go
- vector.go
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 绘制命令可依次作用到不同光栅后端,用于逐像素对照 与速度测试。 |