Skip to content

Latest commit

 

History

History
166 lines (133 loc) · 39.8 KB

README.md

File metadata and controls

166 lines (133 loc) · 39.8 KB

OFD 测试文档索引

本目录保存解析、校验、文字提取、渲染和格式转换使用的 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)

本仓库生成(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)

外部收集(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 和必要的严格校验。