Skip to content

FLD 功能概述

FLD(Fixed-layout document)模块用于统一承载 PDF/OFD 文档访问能力,提供文档加载、类型识别、页枚举、页面几何信息与显示矩阵计算等通用接口。开发者可先通过 FLDDoc 建立统一处理流程,再依据文档类型映射到 PDFDocOFDDoc 执行格式专属能力,从而降低多格式接入成本并提升业务代码复用性。

支持范围

FLD 模块随 福昕 PDF SDK 发布,当前支持以下运行环境:

维度支持项
语言C++、Java
操作系统Windows、Linux
架构Windows x86、Windows x64、Linux x86_64

请选用与目标平台匹配的 SDK 发布包。未列出的操作系统或 CPU 架构不在当前预编译库支持范围内。不同语言中的类名、头文件和包路径略有差异,请参阅下方「API 概览」及接口文档。

适用场景

FLD 模块适用于以下场景:

  • 使用统一入口加载 PDF 或 OFD 文档。
  • 在业务层不预先区分文件格式的情况下,获取文档类型、页数和页面信息。
  • 基于统一页面对象获取页面尺寸、旋转角度和显示矩阵。
  • 构建 PDF/OFD 共用的预览、缩略图、批量渲染或格式分发流程。
  • 在识别文档类型后,将 FLDDoc 映射为 PDFDocOFDDoc,继续调用格式专属 API。

如果业务需要处理 OFD 书签、附件、水印、签名、图形对象等 OFD 专属能力,应使用 OFD 模块

API 概览

功能C++ API(foxit::fld / foxit::common核心参数 / 描述
文档对象FLDDoc路径或内存构造 → Load → 识别 PDF/OFD
页面对象FLDPageGetPage 取得 → Parse → 读尺寸/矩阵
文档类型FLDDoc::FLDTypee_FLDTypePDFe_FLDTypeOFDe_FLDTypeUnknown
引擎映射PDFDoc(FLDDoc)OFDDoc(FLDDoc)识别类型后进入 PDF / OFD 引擎专属 API
页面渲染FLDRender构造绑定 BitmapRender(FLDPage, matrix) 同步渲染
渲染选项FLDRenderOptioncolor_modeback_colorfore_colorx_dpi / y_dpiis_print

示例

以下示例基于接口 FLDDocPDFDoc(FLDDoc)OFDDoc(FLDDoc),演示如何先通过 FLD 统一加载文档,再根据文档类型进入 PDF 或 OFD 专属处理流程,并读取首页几何信息。

c++
#include "common/fs_common.h"
#include "fld/fs_flddoc.h"
#include "pdf/fs_pdfdoc.h"
#include "ofd/fs_ofddoc.h"

using namespace foxit;
using namespace foxit::fld;

void HandleFixedLayoutDocument(const wchar_t* input_file) {
  FLDDoc fld_doc(input_file);
  if (fld_doc.IsEmpty()) {
    return;
  }

  ErrorCode error_code = fld_doc.Load("");
  if (error_code != e_ErrSuccess) {
    return;
  }

  FLDDoc::FLDType doc_type = fld_doc.GetFLDType();
  if (doc_type == FLDDoc::e_FLDTypePDF) {
    foxit::pdf::PDFDoc pdf_doc(fld_doc);
    // 调用 PDF 专属 API 继续处理。
  } else if (doc_type == FLDDoc::e_FLDTypeOFD) {
    foxit::ofd::OFDDoc ofd_doc(fld_doc);
    // 调用 OFD 专属 API 继续处理。
  }

  int page_count = fld_doc.GetPageCount();
  if (page_count > 0) {
    FLDPage page = fld_doc.GetPage(0);
    if (!page.IsEmpty()) {
      error_code = page.Parse();
      if (error_code == e_ErrSuccess) {
        float page_width = page.GetWidth();
        float page_height = page.GetHeight();
        int render_width = (int)(page_width * 96 / 72);
        int render_height = (int)(page_height * 96 / 72);
        Matrix matrix = page.GetDisplayMatrix(0, 0, render_width, render_height, e_Rotation0);
        // 获取页面几何信息,或使用 FLDRender 渲染页面。
      }
    }
  }
}
java
import com.foxit.sdk.PDFException;
import com.foxit.sdk.common.Constants;
import com.foxit.sdk.common.fxcrt.Matrix2D;
import com.foxit.sdk.fld.FLDDoc;
import com.foxit.sdk.fld.FLDPage;
import com.foxit.sdk.ofd.OFDDoc;
import com.foxit.sdk.pdf.PDFDoc;

public class FLDWorkflow {
    public static void handleFixedLayoutDocument(String inputFile) throws PDFException {
        FLDDoc fldDoc = new FLDDoc(inputFile);
        if (fldDoc.isEmpty()) {
            return;
        }

        int errorCode = fldDoc.load(null);
        if (errorCode != Constants.e_ErrSuccess) {
            return;
        }

        int docType = fldDoc.getFLDType();
        if (docType == FLDDoc.e_FLDTypePDF) {
            PDFDoc pdfDoc = new PDFDoc(fldDoc);
            // 调用 PDF 专属 API 继续处理。
        } else if (docType == FLDDoc.e_FLDTypeOFD) {
            OFDDoc ofdDoc = new OFDDoc(fldDoc);
            // 调用 OFD 专属 API 继续处理。
        }

        int pageCount = fldDoc.getPageCount();
        if (pageCount > 0) {
            FLDPage page = fldDoc.getPage(0);
            if (!page.isEmpty()) {
                errorCode = page.parse();
                if (errorCode == Constants.e_ErrSuccess) {
                    float pageWidth = page.getWidth();
                    float pageHeight = page.getHeight();
                    int renderWidth = (int) (pageWidth * 96 / 72);
                    int renderHeight = (int) (pageHeight * 96 / 72);
                    Matrix2D matrix = page.getDisplayMatrix(0, 0, renderWidth, renderHeight, Constants.e_Rotation0);
                    // 获取页面几何信息,或使用 FLDRender 渲染页面。
                }
            }
        }
    }
}

相关示例

可运行示例位于 福昕 PDF SDK 发布包 中,路径均相对于 SDK 根目录。各专题章节正文不重复列出示例路径;需要对照完整工程时,请在发布包中打开下列目录:

  • C++:examples/simple_demo/fld_render/fld_render.cpp
  • Java:examples/simple_demo/fld_render/fld_render.java