PDF 生成模板编辑器
开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。
使用 getOptimizeOptions() 取得原生默认配置,再调用 optimizeSaveAsCopy() 输出副本。以下示例接收已完成文档加载的阅读器及可写输出路径。
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 | 彩色、灰度和黑白图片的独立配置 |
colorSpaceConvert | ICC 色彩空间转换配置 |
启用 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,耗时单位为微秒。
在任务执行期间,从取消按钮调用:
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,应用需捕获错误并检查结果。