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 渲染页面。
}
}
}
}
}