Skip to content
DemoAPI 参考文档FAQ

PDF 生成模板编辑器

开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。

查看 GitHub
React Native Guides Compress

文档压缩优化 ​

使用 getOptimizeOptions() 取得原生默认配置,再调用 optimizeSaveAsCopy() 输出副本。以下示例接收已完成文档加载的阅读器及可写输出路径。

配置并压缩 ​

ts
import { CPDFReaderView, type CPDFOptimizeOptions }
  from '@compdfkit_pdf_sdk/react_native';

async function compressDocument(reader: CPDFReaderView, outputPath: string) {
  if (!await reader.save()) throw new Error('保存文档失败');
  const document = reader._pdfDocument;
  const current = await document.getOptimizeOptions();
  const options: CPDFOptimizeOptions = {
    ...current,
    flags: ['compress_images', 'remove_unused_objects',
      'remove_empty_objects', 'optimize_page_content'],
    imageQuality: 60,
    colorImageOptions: { ...current.colorImageOptions, quality: 60 },
    grayscaleImageOptions: { ...current.grayscaleImageOptions, quality: 60 },
    monochromeImageOptions: { ...current.monochromeImageOptions, quality: 60 },
  };
  const result = await document.optimizeSaveAsCopy(
    outputPath, options, false,
    (pageIndex) => console.log('已处理页面索引', pageIndex),
  );
  if (result.cancelled) return result;
  if (!result.ok) throw new Error('文档压缩失败');
  return result;
}

输出路径须与源文件不同,父目录须存在且可写。任务结束后,SDK 会从源文件重新加载阅读器,未保存的编辑会丢失,因此必须先保存。成功后如需查看压缩结果,主动打开输出文件。

优化配置 ​

配置说明
flags优化操作的字符串数组,如压缩图片、清理未使用对象
imageQuality全局图片质量,范围 1–100
colorImageOptions、grayscaleImageOptions、monochromeImageOptions彩色、灰度和黑白图片的独立配置
colorSpaceConvertICC 色彩空间转换配置

启用 compress_images 才会重新压缩图片。每类图片的 quality 优先于全局 imageQuality,因此同时设置四处质量值;质量为 100 时跳过图片重新压缩。图片配置还包括 upperPpi、targetPpi、blockSize 和 compressAlgorithm,用于降采样及压缩设置。

彩色和灰度图片可按需求选用 jpeg 或 jpeg2000,黑白图片可用 jbig2。flate 在 iOS 映射为 JPEG 2000,不能据此承诺跨平台无损;none、run_length 在 iOS 保留该类图片的默认算法。

默认配置含移除书签、隐藏图层和 JavaScript 动作等选项。示例显式选择四项操作;使用默认配置前应核对业务所需内容。色彩转换通过 colorSpaceConvert.iccDataBase64 传入 ICC 文件的原始 Base64 字符串(不带 Data URL 前缀),rgbToCmyk 指定转换方向。

fontSubset 为第三个参数,默认 false,仅 Android 应用该保存选项,iOS 忽略。

进度、取消和失败 ​

进度回调返回已处理的页面索引,不是百分比。result 包含 ok、cancelled、pagesProcessed、stepsUs 和 saveUs,耗时单位为微秒。

在任务执行期间,从取消按钮调用:

ts
import { CPDFReaderView } from '@compdfkit_pdf_sdk/react_native';

async function cancelCompression(reader: CPDFReaderView) {
  await reader._pdfDocument.cancelOptimize();
}

取消后,原压缩 Promise 返回 cancelled: true,不应将取消显示为压缩成功。同一阅读器同时只能运行一个任务;iOS 在同一进程中共用压缩任务状态,应串行执行。重复启动会拒绝并返回 OPTIMIZE_ALREADY_RUNNING。无效输出路径可能产生 INVALID_OUTPUT_PATH;若出现 OPTIMIZE_RESTORE_FAILED,应重新打开文档,恢复阅读器后再操作。其他原生失败也可能拒绝 Promise,应用需捕获错误并检查结果。