Skip to content

OFD 线性包

本节介绍 OFD 线性包访问能力。OFDLinearPackage 用于打开线性化 OFD 文件,并按包内路径读取指定文件内容(例如 OFD.xmlDoc_0/Document.xml、页面 Content.xml、资源 XML 等)。该能力适用于包结构分析、调试或读取内部原始文件。

OFDLinearPackage 不依赖 OFDDocOFDPage 作为入口,与 OFDPackage::LoadDocument 的文档加载流程相互独立。

任务场景

  • 读取线性化 OFD 包内指定路径的文件内容。
  • 分析或排查 OFD 包内部 XML、资源文件。
  • 验证包内路径是否可读(与 GetFileContent 行为相关)。

API 概览

功能C++ API(foxit::ofd核心参数 / 描述
线性包OFDLinearPackage从 OFD 文件路径构造;与 OFDPackage 独立入口
读取包内文件GetFileContent参数为包内相对路径(如 OFD.xmlDoc_0/Document.xml);
支持 String / WString
有效性IsEmpty构造失败或路径无效时为 true

读取包内文件内容

通过文件路径构造 OFDLinearPackage 后,调用 GetFileContent 传入包内相对路径(支持 StringWString)。路径不存在或无效时,可能返回空内容或抛出异常,具体以接口文档为准。

以下示例演示读取包内 OFD.xml 内容。

c++
#include "ofd/fs_ofdlinearpackage.h"

using namespace foxit;
using namespace foxit::ofd;

void ReadLinearPackageEntry(const wchar_t* input_file) {
  OFDLinearPackage linear_package(input_file);
  if (linear_package.IsEmpty()) {
    return;
  }

  String content = linear_package.GetFileContent(String("OFD.xml"));
}
java
import com.foxit.sdk.ofd.OFDLinearPackage;

public class OFDLinearPackageRead {
    public static void readLinearPackageEntry(String inputFile) throws Exception {
        OFDLinearPackage linearPackage = new OFDLinearPackage(inputFile);
        if (linearPackage.isEmpty()) {
            return;
        }

        String content = linearPackage.getFileContent("OFD.xml");
    }
}

注意事项

  • OFDLinearPackageOFDPackage 用途不同:前者按路径读内部文件,后者用于加载 OFDDoc、保存文件包等完整包操作。
  • 需要判断 OFD 是否符合规范时,请使用 OFDPackage::Verify,不要使用本节 API 替代。