Optional content 阅读器状态
原生栅格化可以显式应用 ISO 32000-1:2008 8.11.4.4 和 8.11.4.5 中阅读器风格的 optional content 建议
默认选项保持 ViewerState=nil,在两种注释用法下都保留独立的 final-form D 行为,不自动应用 AS
Access := Document.GetRenderAccess(0);
Context := THPDFOptionalContentContext.Default;
Context.Zoom := 2;
Context.Language := 'en-US';
Viewer := THPDFHeadlessOptionalContentState.Create(Access, Context);
try
Viewer.SetGroupState(10, 0, True);
Options := THPDFHeadlessRenderOptions.Default;
Options.ViewerState := Viewer;
Viewer.Event := hocePrint;
Options.Usage := hruPrint;
HPDFRenderHeadlessPagePNGFile(Access, OutputFile, Options);
finally
Viewer.Free;
end;
View 先初始化 D,再应用匹配的 View application,最后是手动覆盖;Print 或 Export application 会在该操作期间临时替换当前建议,不修改状态对象或 PDF 字典
要使某组为 ON,匹配 application 与类别下每一条活动建议都必须是 ON;缺失的用法信息不提供建议,该组保持当前状态
受支持的类别为 View、Print、Export、Zoom、Language 和 User;CreatorInfo 和 PageElement 仅为信息性
Zoom 使用闭区间下限和开区间上限,至少需要一个边界,默认零和无穷大;Language 在 application 的 OCG 内优先精确匹配大小写不敏感的标签,否则匹配标记为 Preferred ON 的主语言组
User 用精确 Unicode 文本比较显式提供的 Individual、Title 或 Organization 与字符串或名称数组;PDFDocEncoding、UTF-16 和 PDF 2.0 UTF-8 文本字符串保留其解码后的含义
省略 OCGs 的 application 默认空组集合;既有 Print usage 字典省略 PrintState 时不提供建议
AS 不把类别限定到同名事件,因此 Print application 可以用同一个显式 context 应用 Zoom 或 Language 建议
OCMD 策略、递归 VE 表达式、嵌套标记内容、Form XObject、图像和注释外观通过既有的设界可见性路径消费最终的组状态
手动变更在 context 变更之间持续存在,直到被清除或回退;文档重新加载、变更、关闭或销毁会让状态永久过期,需要重新获取访问并新建对象
每次渲染期间请保持借用的状态存活且不变;只要底层适配器的回调并发契约仍然有效,只读复用是允许的
渲染工作、组查找、语言候选扫描、手动选中查找、设界的十六进制与 UTF-8 文本解码以及临时状态存储,都计入操作、token、解码字节、工作字节和取消限制
SetGroupState 是调用方驱动的状态容器操作,容量 100000 个选中项;渲染限制独立约束消费,应用层应对外部选中请求施加合适的限制
阅读器事件独立于注释 Usage;该选项不授予打印权限、不执行 SetOCGState action、不激活 rich media,也不创建用户界面
验收使用独立声明的状态和精确的 RGB 矩形掩码、生命周期与变更测试、可重入与串行化回调的并发渲染,以及独立的 MuPDF 与 Poppler 观察
阅读器默认 context 的观察不能替代显式的原生 Zoom、Language、User 或手动状态等式;plain 几何伴随项独立验证栅格坐标
Linux 版本化 JSON 操作
{
"schemaVersion": 1,
"type": "render",
"dpi": 72,
"usage": "view",
"optionalContent": {
"event": "print",
"zoom": 2,
"language": "en-US",
"individual": "Alice",
"title": "Engineer",
"organization": "Example",
"selections": [
{"objectNumber": 10, "generationNumber": 0, "enabled": true}
]
}
}
省略 optionalContent 保留静态 D 行为;提供对象则激活自动状态,默认 View 事件、zoom 1 以及空的 language 和 user context 字符串
event 接受 view、print 或 export,与注释 usage 相互独立;不推断操作系统的语言、用户身份或显示缩放
context 字符串各最多 4096 个 UTF-16 code unit;zoom 必须是有限正数且不超过 1000000000
selections 要求正的 object number、0 到 65535 的 generation number 和显式 Boolean 的 enabled 值;操作在工作内存限额内最多接纳 1024 个选中项,重复引用以最后提供的状态为准
每次操作都会创建并释放自己的借用原生态,后续请求请重新发送所需的手动选中项;不带该对象的 PDF 字典和后续渲染保留先前配置
畸形 JSON 选项返回 invalid-argument 状态,准入预算失败返回 budget-exceeded 状态,畸形文档元数据或过期组引用在 PNG 发布前保留既有的渲染解析错误状态
能力报告 optionalContent.automaticState、三种事件、显式 context 成员、手动选中支持和操作级生命周期
用 Tests/Linux/Build-LinuxABIOptionalAutomaticFixtures.py OUTPUT 生成真实的 plain 与 AES R5/R6 Language/User 源,然后对每个原生 ABI 构建运行 Tests/Linux/Run-LinuxABIOptionalAutomaticAcceptance.sh LIBRARY FIXTURES NEW_OUTPUT
回调验收检查独立像素公式、严格 JSON 类型、加密、预算、取消、粘性输出/结果失败、同句柄恢复以及不保留阅读器状态;需要 pypdf、cryptography、NumPy 和 Pillow,并抑制桌面阅读器启动
另见 THPDFHeadlessOptionalContentState、THPDFOptionalContentContext 和 IHPDFHeadlessRenderLifetime