OFD 功能概述
OFD 模块面向 OFD 文档处理场景,提供文档与页面、渲染、文本、注释与动作、导航结构、附件、图形对象与图层、水印、签名与签章、安全与权限、文件包、线性包、信封、自定义标签与标引树、元数据与资源、优化与压缩等能力。
从文件打开 OFD 时,应先使用 OFDPackage 打开文件包,再通过 LoadDocument 取得 OFDDoc。OFDDoc 表示包内某一文档的内容对象,用于文档级操作;OFDPage 表示具体页面,用于页面级操作。取得 OFDDoc 或 OFDPage 后,可进入渲染、文本、图元、附件、书签、签名等具体功能。打开文件包、检查加密、保存等包级操作请参阅 OFD 文件包。线性包、信封、优化等另有独立入口,详见各专题章节。
支持范围
OFD 模块随 福昕 PDF SDK 发布,当前支持以下运行环境:
| 维度 | 支持项 |
|---|---|
| 语言 | C++、Java |
| 操作系统 | Windows、Linux |
| 架构 | Windows x86、Windows x64、Linux x86_64 |
请选用与目标平台匹配的 SDK 发布包。未列出的操作系统或 CPU 架构不在当前预编译库支持范围内。不同语言中的类名、头文件和包路径略有差异,请参阅下方「API 概览」及接口文档。
适用场景
- 从文件路径、内存或自定义读取回调打开 OFD,并加载包内文档。
- 访问页面、模板页、资源,以及渲染、文本、注释等文档内容能力。
- 处理书签、大纲、附件、水印、签名、安全权限等 OFD 专属能力。
- 使用线性包、信封、优化等包级或独立能力处理特定业务场景。
若业务只需要统一加载 PDF/OFD 并进行预览、缩略图或批量渲染,可优先使用 FLD 模块。
API 概览
| 功能 | C++ API(foxit::ofd) | Java API | 核心参数 / 描述 |
|---|---|---|---|
| 文件包 | OFDPackage | com.foxit.sdk.ofd.OFDPackage | 路径/内存/ReaderCallback 打开 → LoadDocument → 包级保存;详见 OFD 文件包 |
| 文档对象 | OFDDoc | com.foxit.sdk.ofd.OFDDoc | OFDPackage::LoadDocument 取得;不可按路径直接构造 |
| 页面对象 | OFDPage | com.foxit.sdk.ofd.OFDPage | OFDDoc::GetPage / GetPageByID 取得;页面级内容与渲染入口 |
功能概览
打开与包级能力
| 功能组 | 说明 | 章节 |
|---|---|---|
| 文件包 | 打开、加载文档、保存、加密状态、规范校验 | OFD 文件包 |
| 线性包 | 按包内路径读取线性化 OFD 内部文件内容 | OFD 线性包 |
| 信封 | 信封加密、信息读取、密码校验、解密 | OFD 安全信封 |
| 优化与压缩 | OFD 优化、图片压缩 | OFD 优化与压缩 |
文档内容能力
| 功能组 | 说明 | 章节 |
|---|---|---|
| 文档与页面 | 页增删改、OFDTemplatePage 模板页、页面区域、文档合并等 | OFD 文档与页面 |
| 渲染 | OFDRender、渲染选项、渐进式渲染 | OFD 渲染 |
| 文本 | 文本页、选择、搜索 | OFD 文本页与搜索 |
| 注释与动作 | 页面注释、跳转/URI/多媒体等动作 | OFD 注释与动作 |
| 图形对象与图层 | 文本/路径/图片/视频等图元与图层 | OFD 图形对象与图层 |
| 书签、大纲与目录 | 书签、大纲、目录(Catalog) | OFD 书签、大纲与目录 |
| 附件 | 附件及附件目录、电子票据等 | OFD 文档附件 |
| 水印 | 文本/图片水印、对齐、平铺、区域与多区域 | OFD 文档水印 |
| 签名与签章 | 签名、签章、证书签名、验签 | OFD 签名与签章 |
| 安全与权限 | 打开加密文档时的自定义解密、文档权限 | OFD 安全与权限 |
| 自定义标签与标引树 | 自定义标签、公文语义、票据标引 | OFD 自定义标签与标引树 |
| 元数据与资源 | Metadata、关键字、自定义数据、资源导出 | OFD 元数据与资源 |
示例
以下示例演示从 OFD 文件打开到读取第一页区域信息。
c++
#include "ofd/fs_ofdpackage.h"
#include "ofd/fs_ofddoc.h"
#include "ofd/fs_ofdpage.h"
using namespace foxit;
using namespace foxit::ofd;
void OpenOFDAndGetFirstPage(const wchar_t* input_file) {
OFDPackage package(input_file);
if (package.IsEmpty() || package.GetDocumentCount() <= 0) {
return;
}
OFDDoc doc = package.LoadDocument(0, "");
if (doc.IsEmpty() || doc.GetPageCount() <= 0) {
return;
}
OFDPage page = doc.GetPage(0);
if (page.IsEmpty()) {
return;
}
RectF page_box = page.GetPageBox(OFDPage::e_PhysicalBox);
float page_width = page_box.right - page_box.left;
float page_height = page_box.bottom - page_box.top;
}
java
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.ofd.OFDDoc;
import com.foxit.sdk.ofd.OFDPackage;
import com.foxit.sdk.ofd.OFDPage;
public class OFDOverview {
public static void openOFDAndGetFirstPage(String inputFile) throws Exception {
OFDPackage pkg = new OFDPackage(inputFile);
if (pkg.isEmpty() || pkg.getDocumentCount() <= 0) {
return;
}
OFDDoc doc = pkg.loadDocument(0, null);
if (doc.isEmpty() || doc.getPageCount() <= 0) {
return;
}
OFDPage page = doc.getPage(0);
if (page.isEmpty()) {
return;
}
RectF pageBox = page.getPageBox(OFDPage.e_PhysicalBox);
float pageWidth = pageBox.getRight() - pageBox.getLeft();
float pageHeight = pageBox.getBottom() - pageBox.getTop();
}
}
与 FLD 模块的关系
请参阅 选择 OFD 还是 FLD。通过 FLD 加载 OFD 后,也可使用 OFDDoc(FLDDoc) 转入 OFD 文档对象;OFD 模块原生的文件打开路径仍请参阅 OFD 文件包。
相关示例
可运行示例位于 福昕 PDF SDK 发布包 中,路径均相对于 SDK 根目录。需要对照完整工程时,请在发布包中打开下列目录:
| 示例目录 | 说明 |
|---|---|
examples/simple_demo/ofd_render/ | 打开 OFDPackage、加载文档、页面渲染 |
examples/simple_demo/ofd_search/ | 文本搜索 |
examples/simple_demo/ofd_bookmark/ | 书签 |
examples/simple_demo/ofd_outline/ | 大纲 |
examples/simple_demo/ofd_attachment/ | 附件 |
examples/simple_demo/ofd_graphics_objects/ | 图形对象 |
examples/simple_demo/ofd_watermark/ | 水印 |
- C++ 发布包:主程序为各目录下的
ofd_*.cpp - Java 发布包:主程序为各目录下的
ofd_*.java
信封、线性包、签名、优化等能力当前无独立 simple_demo 工程,请参阅接口文档。