Skip to content

OFD 功能概述

OFD 模块面向 OFD 文档处理场景,提供文档与页面、渲染、文本、注释与动作、导航结构、附件、图形对象与图层、水印、签名与签章、安全与权限、文件包、线性包、信封、自定义标签与标引树、元数据与资源、优化与压缩等能力。

从文件打开 OFD 时,应先使用 OFDPackage 打开文件包,再通过 LoadDocument 取得 OFDDocOFDDoc 表示包内某一文档的内容对象,用于文档级操作;OFDPage 表示具体页面,用于页面级操作。取得 OFDDocOFDPage 后,可进入渲染、文本、图元、附件、书签、签名等具体功能。打开文件包、检查加密、保存等包级操作请参阅 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::ofdJava API核心参数 / 描述
文件包OFDPackagecom.foxit.sdk.ofd.OFDPackage路径/内存/ReaderCallback 打开 → LoadDocument → 包级保存;详见 OFD 文件包
文档对象OFDDoccom.foxit.sdk.ofd.OFDDocOFDPackage::LoadDocument 取得;不可按路径直接构造
页面对象OFDPagecom.foxit.sdk.ofd.OFDPageOFDDoc::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 工程,请参阅接口文档。