本目录保存解析、校验、文字提取、渲染和格式转换使用的 OFD fixture。下表登记常用的 43 个 .ofd 样例;文档体、页面、对象、文字、图片、字体等数量来自 cmd/ofd-analyzer 的当前分析结果。来源 列标注生成 manifest、合并来源或外部收集的分类。文件大小使用 K/M 表示(1K = 1000 bytes,1M = 1000000 bytes)。数量会随着 fixture 内容变化而变化,特性说明则以便于选取测试样例为目标。
来源分三类:OFD.xml 中带 Creator=ofd-creator 的文件由本仓库的创建器生成,表中给出对应的生成来源 manifest;ofdrw/ 目录下的文件取自 ofdrw/ofdrw(Apache-2.0),版权归该项目作者所有,仅用作测试夹具;其余文件(huawei.ofd、multi_demo.ofd 等)为手工构造或外部收集的样本,原始发布者、授权许可和来源链接尚未逐一核实;如需再分发或用于生产,请自行确认相应权利。
markdown/ 和 pdf/ 子目录保存的是 Markdown、PDF 等非 OFD 格式的导入测试输入,不在本表登记。
本目录的 OFD 样例、大型 PDF 和第三方测试文档由独立仓库
zc310/ofd-fixtures 管理,不随 ofd 主仓库检出。
首次运行依赖这些样例的测试前,在仓库根目录执行:
make fixtures该命令从 ofd-fixtures 的 GitHub main 分支下载压缩包,并将其中整个 testdata/ 目录
同步到本地;下载内容已由 .gitignore 排除,不会进入 ofd 提交。需要使用其他分支或版本时,
可通过 FIXTURES_URL 指定对应的 GitHub archive 地址。运行需要安装 curl 和 unzip。
想先看某个 fixture 的实际渲染效果,可用项目部署的 WASM 阅读器:https://zc310.github.io/ofd/wasm/。打开页面后点击「打开文件」选择本目录下的 .ofd,或直接把文件拖入页面;OFD 在浏览器本地解析和渲染,文件不会上传。页面还提供缩略图、搜索、双页阅读和「使用系统字体」等选项,便于横向比对不同样例。
字体显示说明: 多数 fixture 声明了字体但未嵌入字形数据,阅读器只能回退渲染。未勾选「使用系统字体」时,一律使用在线回退字体(Noto Sans SC),因此中文文档显示为黑体、与文档原本声明的宋体/仿宋等无关,这不是渲染缺陷。想看接近原文档的效果,需在工具栏「显示设置」面板勾选「使用系统字体」并授权浏览器读取本地字体;勾选状态会被记住,打开新文档后自动读取,所读系统字体仅对当前文档有效。 该选项依赖浏览器本地字体访问 API,仅部分浏览器支持;不支持时菜单项不会出现,此时只能看到回退字体的效果。
本目录 43 个 fixture 按来源分为本仓库生成与外部收集两组,下表默认折叠,需要时点击展开。
本仓库生成(37 个 .ofd)
| 文件 | 大小 | 结构摘要 | 主要特性和适用场景 | 来源 |
|---|---|---|---|---|
1000-pages.ofd |
467K | 1 文档,1000 页,1000 对象,19000 字符,2 字体,1 模板 | A4 纵向大文档;每页带模板内容和页码,适合测试大页数、首尾页、分页加载、虚拟列表和批量渲染。 | 生成:1000-pages.json |
5000-pages.ofd |
2.3M | 1 文档,5000 页,5000 对象,95000 字符,2 字体,1 模板 | A4 纵向大文档;与 1000-pages.ofd 同结构、页数更多,适合测试中等页数规模、分页加载、虚拟列表和批量渲染。 |
生成(配置未存档) |
10000-pages.ofd |
4.7M | 1 文档,10000 页,10000 对象,200001 字符,2 字体,1 模板 | A4 纵向超大大文档;与 1000-pages.ofd 同结构,适合测试极限页数、虚拟列表、内存占用和批量渲染。 |
生成(配置未存档) |
actions.ofd |
5.3K | 1 文档,2 页,7 对象,134 字符,2 多媒体,1 字体,3 附件 | 动作示例;点击打开 URI、按书签跳到第二页,并引用音频和视频资源。附件动作(GotoA)显式带 NewWindow 新窗口参数并覆盖 true/false 两种取值,可打开文本附件或内嵌的最小单页 OFD 测试文件。 | 生成:actions.yaml |
annotations.ofd |
2.9K | 1 文档,1 页,31 对象,164 字符,1 字体,3 注解 | 页面注解示例;整页 Watermark 水印(多处旋转的「保密资料」文字)、半透明红色「已阅」Stamp 印章与指向它的蓝色箭头 Path 路径注解,适合测试注解类型解析、外观渲染和注解叠加。 | 生成:annotations.yaml |
axial-extend.ofd |
1.8K | 1 文档,1 页,9 对象,85 字符,1 字体 | 轴向渐变 Extend 示例;轴线短于矩形,分别展示 Extend 0、1、2、3。 | 生成:axial-extend.yaml |
clips.ofd |
2.7K | 1 文档,2 页,15 对象,149 字符,1 字体 | 裁剪区示例;矩形分别被椭圆路径和文字裁剪,第 1 页演示同一 Clip 内两个 Area 取并集,第 2 页演示同一图元的多个 Clip 取交集。 | 生成:clips.yaml |
color-spaces.ofd |
2.4K | 1 文档,1 页,15 对象,72 字符,1 字体,4 颜色空间 | 颜色空间示例;覆盖 GRAY、CMYK、RGB 调色板和带 sRGB ICC Profile 的 RGB。各色块期望渲染值见颜色空间渲染基准。 | 生成:color-spaces.yaml |
cover-thumbnail.ofd |
2.7K | 1 文档,1 页,4 对象,135 字符,1 字体,1 图片,1 复合图元 | 封面与缩略图示例;文档封面以 base64 内嵌小图写入 Doc_0/Cover/cover.png,复合图元 701 的 Thumbnail 缩略图引用图片 601,适合测试 DocInfo 封面写入与 CT_VectorG 缩略图引用。 | 生成:cover-thumbnail.yaml |
default-cs.ofd |
1.8K | 1 文档,1 页,7 对象,128 字符,1 字体,2 颜色空间 | 默认颜色空间示例;CommonData 显式声明 DefaultCS=1 指向 RGB 颜色空间(规范:缺省该元素时默认 RGB),另有 GRAY 空间供显式引用;左块普通 RGB 值色、右块 GRAY 分量色,适合测试默认颜色空间的声明、引用校验与导出往返。 | 生成:default-cs.yaml |
draw-params.ofd |
1.9K | 1 文档,1 页,10 对象,92 字符,1 字体,3 DrawParam | 绘制参数继承示例;thick 继承 base 并改线宽,dashed 再继承 thick 并改为虚线和蓝色描边。 |
生成:draw-params.yaml |
drawparam.ofd |
6.8K | 1 文档,4 页,94 对象,1204 字符,1 字体,12 DrawParam,1 颜色空间 | 绘制参数示例;覆盖 DrawParam 引用与对象级属性、线宽、Cap、Join、MiterLimit、虚线及颜色,适合验证绘制参数继承和路径描边。 | 手工构造;反推 drawparam.yaml |
font-styles.ofd |
3.6K | 1 文档,2 页,48 对象,1004 字符,4 字体,1 颜色空间 | 字体样式矩阵;覆盖 100--900 字重、常规/斜体、字号、HScale、填充/描边文字,以及轴向和径向渐变文字。 | 生成:font-styles.yaml |
gouraud.ofd |
2.3K | 1 文档,1 页,21 对象,213 字符,1 字体 | Gouraud 三角网格渐变样例;覆盖单三角形、EdgeFlag=1 连续拼接三角带、EdgeFlag=2 扇形和 EdgeFlag=0 独立三角对,并以同一网格对照 Extend=0 未覆盖区透明与 Extend=1+Back Color 橙色填充,适合网格拓扑解析、顶点颜色插值和 Extend/BackColor 渲染回归测试。 | 生成:gouraud.yaml |
gouraud-edgeflag.ofd |
2.4K | 1 文档,1 页,12 对象,216 字符,1 字体 | 方向标志对照示例;逐格还原 GB/T 33190 图 40:EdgeFlag=0 为两个独立三角形(无共享边,重叠区合成顺序由阅读器决定),EdgeFlag=1 复用 V1-V2 边拼成菱形,EdgeFlag=2 复用 V0-V2 边拼成平行四边形;正文使用思源黑体,适合共享边解析、三角形拓扑与网格连续性回归测试。 | 生成:gouraud-edgeflag.yaml |
hello.ofd |
1.5K | 1 文档,1 页,2 对象,21 字符,1 字体 | 最小 Hello World 文档;适合快速验证 OFD 打开、基础文字读取和最小渲染链路。 | 生成:hello.yaml |
helloworld.ofd |
2.4K | 1 文档,2 页,10 对象,42 字符,1 字体 | 基础创建器输出;包含英文和中文文字,以及轴向/径向渐变矩形,适合 converter API、PDF 输出和渐变渲染测试。 | 生成:helloworld.yaml |
image-effects.ofd |
3.0K | 1 文档,1 页,6 对象,28 字符,4 图片,1 字体 | 图片效果示例;蓝色小图分别演示显式 Clips 圆角裁剪与圆角边框、ImageMask 半透明蒙版和损坏资源的 Substitution 替代图。 |
生成:image-effects.yaml |
kaiti-styles.ofd |
3.0K | 1 文档,2 页,28 对象,451 字符,1 字体 | 楷体排版样例;覆盖字号、粗体、特粗体、斜体、粗斜体、空心描边字和压缩字宽。 | 生成:kaiti-styles.yaml |
line-styles.ofd |
1.9K | 1 文档,1 页,16 对象,147 字符,1 字体 | 线条样式样例;覆盖 Butt/Round/Square 端点、Miter/Round/Bevel 连接、线宽、虚线、偏移、折线和透明度。 | 生成:line-styles.json |
links.ofd |
3.4K | 1 文档,2 页,8 对象,51 字符,1 字体,3 注解 | 链接注解示例;第 1 页两个 Link 注解分别跳转到第 2 页和打开 GitHub URI,第 2 页一个,适合测试页面链接提取、Goto/URI 动作和注解跳转。 | 生成:links.yaml |
link-destinations.ofd |
3.8K | 1 文档,2 页,18 对象,191 字符,1 字体,7 注解 | 跳转目标类型示例;第 1 页六个 Link 注解分别使用 Fit、FitH、FitV、XYZ、XYZ 带缩放、FitR 五种目标类型,目标坐标均不为零,第 2 页一个向后跳转回第 1 页。 | 生成:link-destinations.yaml |
media-actions.ofd |
17.4K | 1 文档,1 页,6 对象,56 字符,2 多媒体,1 字体 | 声音与影片动作示例;打开文档和进入本页时播放 WAV 提示音,点击蓝色区域重播、点击红色区域播放 MP4 影片。 | 生成(配置未存档) |
outlines.ofd |
3.1K | 1 文档,3 页,10 对象,90 字符,1 字体 | 文档大纲示例;六个条目覆盖顶层与两级嵌套、Fit/FitH/FitV/XYZ/FitR 五种目标类型与缩放、按书签名跳转,以及一个只有 URI 没有页面目标、导出时被丢弃的条目,适合测试大纲树的层级、标题编码与目的地换算。 | 生成:outlines.yaml |
multi-doc.ofd |
2.5K | 2 文档,2 页,2 对象,10 字符,2 字体 | 多文档体示例; | 合并:multi-doc-a.yaml multi-doc-b.yaml |
package-extras.ofd |
3.5K | 1 文档,1 页,4 对象,60 字符,1 字体,1 附件 | 包结构示例;包含文本附件、自定义标签架构与数据、扩展属性和自定义数据。 | 生成:package-extras.yaml |
page-area.ofd |
1.7K | 1 文档,1 页,6 对象,38 字符,1 字体 | 页面区域示例;同时标出物理框、应用框、内容框和出血框。 | 生成:page-area.yaml |
path-fill-rules.ofd |
4.6K | 1 文档,3 页,33 对象,317 字符,1 字体 | 路径填充规则对比;覆盖默认规则、NonZero、Even-Odd、嵌套轮廓、星形、多孔图形、重叠路径,以及渐变填充和对象级 Alpha。 |
生成:path-fill-rules.json |
pattern-fill.ofd |
23.1K | 1 文档,24 页,208 对象,3377 字符,1 字体,24 图案 | 图案填充矩阵;棋盘格、圆点、斜纹、镜像斜纹、砖墙和十字编织 6 种单元各配 Normal、Row、Column、RowAndColumn 四种 ReflectMethod,每页对比原始单元与 Pattern 平铺效果。 | 生成(配置未存档) |
pattern-reflect.ofd |
2.9K | 1 文档,2 页,18 对象,117 字符,2 字体,8 图案 | 底纹翻转与图案填充示例;第 1 页同一三角单元按 Normal、Row、Column、RowAndColumn 平铺,第 2 页为自 shading 移入的 Pattern 图案填充示例。 | 生成:pattern-reflect.yaml |
permissions.ofd |
1.7K | 1 文档,1 页,3 对象,32 字符,1 字体 | 权限示例;禁止编辑、批注、水印和截屏,允许导出、签名,打印 2 份,并带有效期。 | 生成:permissions.yaml |
preferences.ofd |
2.1K | 1 文档,2 页,6 对象,66 字符,1 字体 | 阅读偏好示例;PageMode=UseOutlines、PageLayout=TwoPageL、ZoomMode=FitWidth。 |
生成:preferences.yaml |
project-showcase.ofd |
4.6K | 1 文档,2 页,50 对象,388 字符,1 字体 | OFD 项目介绍页;包含文档元数据、背景/正文图层、图形装饰和可点击 GitHub 跳转,适合测试创建器元数据、图层及跳转动作。 | 生成:project-showcase.yaml |
radial-ellipse.ofd |
1.7K | 1 文档,1 页,8 对象,29 字符,1 字体 | 椭圆径向渐变示例;对比离心率 0 与 0.75,以及倾斜 0、45、90 度。 | 生成:radial-ellipse.yaml |
radial-gradient.ofd |
4.5K | 1 文档,5 页,30 对象,179 字符,1 字体 | 径向渐变示例;第 1 页覆盖同心、偏心和三色色标,第 2 页为图 36 的 Extend,后 3 页按 GB/T 33190 图 37 分别绘制 Direct、Repeat、Reflect。 | 生成:radial-gradient.yaml |
radial-extend.ofd |
5.2K | 1 文档,5 页,49 对象,512 字符,1 字体 | 径向渐变 Extend 与 MapType / MapUnit 示例;第 1 页 Direct 下 Extend 0/1/2/3 四格与 Repeat / Reflect 配合 MapUnit=12 对照,第 2、3 页覆盖 MapType=Repeat / Reflect × Extend 0/1/2/3。第 4、5 页各四格几何相同、仅 Extend 不同:第 4 页两圆外离(start=(18,35) r=8 → end=(52,35) r=18,圆心距 34 > r0+r1=26),第 5 页内含(start=(18,35) r=6 → end=(25,35) r=14,圆心距 7 < 半径差 8)。观察起始圆圆心与终止圆外:Extend=0/2 时起始圆是白孔、Extend=1/3 时填充起始色;Extend=0/1 时终止圆外透明、Extend=2/3 时填充终止色;带延伸位的一侧解集包含不带延伸位的一侧且颜色一致,延伸只发生在两圆扫描覆盖不到的点上。 | 生成:radial-extend.yaml |
radial_demo.ofd |
5.2K | 1 文档,5 页,51 对象,537 字符,1 字体,1 颜色空间 | 渐变综合样例;前两页是径向渐变的 Eccentricity 与 Angle,第 3 页是轴向渐变的 Extend/MapType,后两页是径向渐变的 Extend 与 MapType。 | 生成 radial_demo.yaml |
shading.ofd |
5.6K | 1 文档,5 页,43 对象,264 字符,1 字体 | Shading 综合样例;覆盖 Axial、Radial、Gouraud、LaGouraud,并包含 Direct/Repeat/Reflect 映射,适合渐变和网格着色回归测试。 | 生成:shading.yaml |
text-directions.ofd |
6.4K | 1 文档,5 页,85 对象,731 字符,1 字体 | 文字方向样例;覆盖 ReadDirection 的 0/90/180/270 度和 CharDirection 的 0/90 度组合,适合横排、竖排、旋转字形和 TextCode 测试;第 2 页另用 TextCode 的 DeltaX/DeltaY 增量演示逐字波浪形排列(增量第 i 项是第 i+1 字相对第 i 字的位移);第 3 页另演示轴向、径向和 LaGouraud 网格渐变填充文字(渐变坐标为图元 Boundary 内的毫米值)。 |
生成:text-directions.json |
versions.ofd |
3.5K | 1 文档,2 页,4 对象,24 字符,1 字体 | 文档版本示例;v1 只包含第一页,当前版本 v2 增加第二页。 | 生成:versions.yaml |
外部收集(6 个 .ofd)
这 6 个文件为手工构造或外部收集的样本,原始发布者、授权许可和来源链接尚未逐一核实;如需再分发或用于生产,请自行确认相应权利。
| 文件 | 大小 | 结构摘要 | 主要特性和适用场景 | 备注 |
|---|---|---|---|---|
999.ofd |
29.8K | 1 文档,5 页,561 对象,2752 字符,1 图片,4 字体,1 颜色空间,5 模板,1 附件,1 注解,1 签名 | 真实发票类文档;包含混合页面方向、二维码、模板、附件、Stamp 注解和 1 个签名,适合测试复杂包结构、资源引用、附件及签名读取。 | — |
ano.ofd |
718K | OFD 1.1,3 页,533 对象,7250 字符,8 图片,9 字体,55 注解 | 注释与外部资源样例;包含 Stamp 和 Link 页面注释、透明/变换文字、嵌入字体和 JPG/PNG 图片,适合渲染、注释、字体和图像回归测试。 | — |
huawei.ofd |
3.1K | 1 文档,1 页,8 对象,8 路径,0 字符 | Huawei 图标提取结果;由渐变填充的路径和 CTM 组成,包含轴向/径向 Shading,适合测试路径变换、渐变渲染和无文字文档。 | 反推 huawei.yaml |
intro.ofd |
7.5M | 1 文档,42 页,1806 对象,5120 字符,66 图片,12 字体,9 复合图元 | 较大的真实转换文档;包含大量嵌入字体、图片、路径和复合对象,页面为横向,适合字体修复、图片/矢量渲染、SVG/PDF 转换、性能和文字提取测试。 | — |
multi_demo.ofd |
9.1K | 3 文档,4 页,55 对象,530 字符,6 字体,3 DrawParam,3 颜色空间,1 附件 | 多文档包样例;一个 OFD 包中包含 3 个独立文档,覆盖文档级资源、绘制参数、颜色空间和附件,适合测试文档作用域及跨文档 ID 隔离。 | — |
zsbk.ofd |
1.6M | OFD 1.1,2 页,38 对象,296 字符,3 图片,12 字体,2 模板,2 签名 | 真实业务文档样例;页面方向混合,包含图片、嵌入字体、模板页和双签名/印章文件,适合测试真实文档解析、模板应用和签名数据读取。 | — |
color-spaces.ofd 的颜色空间 ID=12 是 Type="CMYK" 且不带 Profile,按规范属于 device CMYK,查看器需要自行选定换算模型。本项目在缺少 ICC 配置文件时使用 Adobe/poppler 的 4 色印刷矩阵模型(internal/coloricc 的 deviceCMYKMatrix),因此 CMYK 原色不会渲染成纯青/品红黄。下表是各色块的期望 sRGB 值,PNG 与 PDF 两条路径一致(canvas 的 PDF 写入器固定按 DeviceRGB 声明图像,CMYK 在写入前已转为 RGB)。
| 颜色空间 | 定义 | 期望 sRGB | 说明 |
|---|---|---|---|
| GRAY (ID=11) | Value="64" |
(64, 64, 64) |
分量值直接作为灰度 |
| GRAY (ID=11) | Value="180" |
(180, 180, 180) |
同上 |
| CMYK (ID=12) | Value="255 0 0 0" |
(0, 173, 239) |
印刷青,非纯青 (0,255,255) |
| CMYK (ID=12) | Value="0 255 0 0" |
(236, 0, 140) |
印刷品红,非纯品红 (255,0,255) |
| CMYK (ID=12) | Value="0 0 255 0" |
(255, 242, 0) |
印刷黄,非纯黄 (255,255,0) |
| RGB 调色板 (ID=13) | Index="0" |
(220, 40, 40) |
调色板项原值 |
| RGB 调色板 (ID=13) | Index="1" |
(40, 90, 180) |
同上 |
| RGB 调色板 (ID=13) | Index="2" |
(40, 150, 80) |
同上 |
| RGB + ICC (ID=14) | Profile="Profiles/srgb.icc" |
(255, 0, 0) |
走 ICC 色彩管理 |
选用印刷矩阵而非逐油墨独立吸收的朴素公式(R=(1-C)(1-K) 等),是为了与 poppler 一致,并让混合色更接近印刷结果:例如青+黄(113 21 243 33)矩阵给出偏橄榄的绿 (127, 172, 40),朴素公式会得到青柠色 (124, 204, 10);纯黑矩阵给出 (35, 31, 32) 而非死黑。internal/render 与 internal/pdf2ofd 共用该模型,保证同一 CMYK 颜色在「转换出来的」和「渲染的」两条路径上一致;TestDeviceCMYKToRGBMatchesPrintModel 逐值固定了上表中的纯色与混合色结果。
需要按真实印刷条件换算时,可设置环境变量 OFD_CMYK_ICC 指向一个 CMYK ICC 配置文件,此时改走 ICC 色彩管理而不再使用上述近似模型。
- 最小打开或基础渲染:
hello.ofd、helloworld.ofd - 字体和文字布局:
font-styles.ofd、kaiti-styles.ofd、text-directions.ofd - 路径、描边和渐变:
drawparam.ofd、line-styles.ofd、path-fill-rules.ofd、radial_demo.ofd、radial-gradient.ofd、shading.ofd、huawei.ofd - 颜色空间:
color-spaces.ofd、multi_demo.ofd - 绘制参数:
drawparam.ofd、draw-params.ofd - 图片、复合对象和性能:
ano.ofd、intro.ofd - 图片圆角裁剪、边框、蒙版和替代图:
image-effects.ofd - 模板、附件、注释和签名:
999.ofd、zsbk.ofd - 页面注解和链接注解:
annotations.ofd、links.ofd - 文档动作:
actions.ofd、media-actions.ofd - 文档版本:
versions.ofd - 权限和阅读偏好:
permissions.ofd、preferences.ofd - 附件、自定义标签和扩展:
package-extras.ofd - 椭圆径向渐变:
radial-ellipse.ofd - 轴向渐变 Extend:
axial-extend.ofd - 径向渐变 Extend 与 MapType:
radial-extend.ofd - 三角网格渐变:
gouraud.ofd - 网格方向标志 EdgeFlag:
gouraud-edgeflag.ofd - 裁剪区:
clips.ofd - 图案填充与底纹翻转:
pattern-fill.ofd、pattern-reflect.ofd - 页面区域:
page-area.ofd - 多文档体:
multi-doc.ofd、multi_demo.ofd - 元数据、图层和跳转:
project-showcase.ofd - 封面与复合图元缩略图:
cover-thumbnail.ofd - 文档默认颜色空间:
default-cs.ofd - 大页数与分页性能:
1000-pages.ofd、5000-pages.ofd、10000-pages.ofd
以下命令从仓库根目录运行:
go run ./cmd/ofd-analyzer --format text testdata/ofd-creator/helloworld.ofd
go run ./cmd/ofd-converter -format pdf testdata/ofdrw/intro.ofd /tmp/intro.pdf
go run ./cmd/ofd-converter -format png -page 1 testdata/ofdrw/ano.ofd /tmp/ano-page-1.png
go test ./internal/render ./test -count=1
刷新本表中的结构摘要可对全部 fixture 重新执行分析:
for f in testdata/*.ofd; do go run ./cmd/ofd-analyzer --format json "$f"; done
创建器示例的 manifest 位于 cmd/ofd-creator/examples。修改这些 manifest 或对应 fixture 时,应执行 --check、--validate 和必要的严格校验。