PDF 与 OFD 互转
本节介绍如何使用 OfdConvert 在 PDF 与 OFD 文件之间互转,以及将 OFD 指定页导出为图片。互转能力归属 Conversion 转换模块,使用前须先成功调用 Library::Initialize,且许可证需包含 Conversion 模块权限。
OFD 文档内容处理(打开包、渲染、签名、水印等)请参阅 OFD 功能概述;统一加载 PDF/OFD 请参阅 FLD 功能概述。从 v11.x 升级时的 API 迁移说明请参阅 v12.0 预览版发版说明。
任务场景
- 将 OFD 文件转换为 PDF(
OfdConvert::ToPdf/OfdConvert.toPdf)。 - 将 PDF 文件转换为 OFD(
OfdConvert::FromPdf/OfdConvert.fromPdf)。 - 将 OFD 指定页导出为 JPG/PNG 等图片(
OfdConvert::ToImage/OfdConvert.toImage)。 - 通过
OFDConvertParam配置文档索引、字体嵌入、DPI、图片质量等转换参数。
API 概览
| 功能 | C++ API(foxit::addon::conversion) | Java API | 说明 |
|---|---|---|---|
| OFD转PDF | OfdConvert::ToPdf | OfdConvert.toPdf | 源 OFD 路径、密码、输出 PDF 路径、OFDConvertParam |
| PDF转OFD | OfdConvert::FromPdf | OfdConvert.fromPdf | 源 PDF 路径、密码、输出 OFD 路径、OFDConvertParam |
| OFD转Image | OfdConvert::ToImage | OfdConvert.toImage | 额外传入 page_index(从 0 起) |
| 转换参数 | OFDConvertParam | OFDConvertParam | 见下表 |
OFDConvertParam 主要字段:
| 字段 | 说明 |
|---|---|
document_index | 多文档 OFD 包内待转换文档索引,默认 0 |
is_embed_font | 是否在输出文件中嵌入字体 |
ofd2pdf_sign_pic_red2black | OFD 转 PDF 时是否将签章图片红色转为黑色 |
dpi | 输出分辨率,默认 96;转图片时常设为 150 或更高 |
dib_format | 转图片时的位图格式(如 Bitmap::e_DIBArgb) |
jpg_quality | JPEG 质量(1–100),默认 75 |
img_width / img_height | 转图片时的目标宽高(0 表示按 DPI 自动计算) |
page_split_x_count / page_split_y_count | 页面拆分栅格数 |
password | 源文件打开密码(未加密时为空字符串) |
v12.0 起 无需 调用 Library::InitializeOFDEngine / ReleaseOFDEngine;OFD 引擎随 SDK 内置,初始化 Library 后即可使用 OfdConvert。
示例
以下示例演示 OFD 与 PDF 互转及 OFD 转图片。完整可运行工程见 SDK 发布包 examples/simple_demo/ofd2pdf/。
c++
#include "common/fs_common.h"
#include "addon/conversion/fs_convert.h"
using namespace foxit;
using namespace foxit::common;
using namespace foxit::addon::conversion;
bool ConvertOfdAndPdf() {
// 须先 Library::Initialize(sn, key) 成功
OFDConvertParam param;
param.document_index = 0;
param.is_embed_font = true;
param.dpi = 150;
param.jpg_quality = 85;
param.password = "";
WString ofd_path = L"input/sample.ofd";
WString pdf_path = L"output/sample.pdf";
WString ofd_out_path = L"output/sample.ofd";
WString img_path = L"output/page0.jpg";
if (!OfdConvert::ToPdf(ofd_path, "", pdf_path, param)) {
return false;
}
if (!OfdConvert::FromPdf(pdf_path, "", ofd_out_path, param)) {
return false;
}
if (!OfdConvert::ToImage(ofd_path, "", img_path, param, 0)) {
return false;
}
return true;
}
java
import com.foxit.sdk.PDFException;
import com.foxit.sdk.addon.conversion.OFDConvertParam;
import com.foxit.sdk.addon.conversion.OfdConvert;
import com.foxit.sdk.common.Library;
import static com.foxit.sdk.common.Constants.e_ErrSuccess;
public class PdfOfdConversion {
public static boolean convertOfdAndPdf() throws PDFException {
// 须先 Library.initialize(sn, key) 成功
OFDConvertParam param = new OFDConvertParam();
param.setDocument_index(0);
param.setIs_embed_font(true);
param.setDpi(150);
param.setJpg_quality(85);
String ofdPath = "input/sample.ofd";
String pdfPath = "output/sample.pdf";
String ofdOutPath = "output/sample.ofd";
String imgPath = "output/page0.jpg";
if (!OfdConvert.toPdf(ofdPath, "", pdfPath, param)) {
return false;
}
if (!OfdConvert.fromPdf(pdfPath, "", ofdOutPath, param)) {
return false;
}
if (!OfdConvert.toImage(ofdPath, "", imgPath, param, 0)) {
return false;
}
return true;
}
}
注意事项
- v11.x 使用的
Convert::FromOFD/Convert::ToOFD与InitializeOFDEngine在 v12.0 已移除,请改用OfdConvert并删除 OFD 引擎独立初始化步骤。 - 提高
dpi或jpg_quality会增大输出文件体积与处理耗时。