Skip to content

FLD 功能概述 ​

FLD(Fixed-layout Document)用于统一加载 PDF 或 OFD 固定版式文档,提供类型识别、页枚举、页面几何信息、显示矩阵与统一渲染。可先通过 FLDDoc 建立格式无关流程,再按类型进入 PDFDoc 或 OFDDoc 的专属能力。

需要 OFD 文档处理专属能力时,请使用 OFD。

适用场景 ​

  • 使用统一入口加载 PDF 或 OFD,业务层不预先区分格式。
  • 获取文档类型、页数、页面尺寸、旋转角度与显示矩阵。
  • 构建 PDF/OFD 共用的预览、缩略图或批量渲染流程。
  • 识别类型后再分支到 PDF 或 OFD 专属 API。

核心能力 ​

能力说明章节
文档加载与类型识别路径/内存加载,识别 PDF / OFD文档与页面
页面访问与几何信息取页、解析、尺寸与显示矩阵文档与页面
映射到专属引擎构造 PDFDoc(FLDDoc) / OFDDoc(FLDDoc)文档与页面
统一渲染FLDRender 与渲染选项渲染

示例 ​

以下示例演示通过 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 渲染页面。
                }
            }
        }
    }
}

开始使用 ​

  • 文档与页面
  • 渲染
  • 随包示例:examples/simple_demo/fld_render/(C++ / Java 等,以发布包为准)