Skip to content

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::conversionJava API说明
OFD转PDFOfdConvert::ToPdfOfdConvert.toPdf源 OFD 路径、密码、输出 PDF 路径、OFDConvertParam
PDF转OFDOfdConvert::FromPdfOfdConvert.fromPdf源 PDF 路径、密码、输出 OFD 路径、OFDConvertParam
OFD转ImageOfdConvert::ToImageOfdConvert.toImage额外传入 page_index(从 0 起)
转换参数OFDConvertParamOFDConvertParam见下表

OFDConvertParam 主要字段:

字段说明
document_index多文档 OFD 包内待转换文档索引,默认 0
is_embed_font是否在输出文件中嵌入字体
ofd2pdf_sign_pic_red2blackOFD 转 PDF 时是否将签章图片红色转为黑色
dpi输出分辨率,默认 96;转图片时常设为 150 或更高
dib_format转图片时的位图格式(如 Bitmap::e_DIBArgb
jpg_qualityJPEG 质量(1100),默认 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::ToOFDInitializeOFDEngine 在 v12.0 已移除,请改用 OfdConvert 并删除 OFD 引擎独立初始化步骤。
  • 提高 dpijpg_quality 会增大输出文件体积与处理耗时。