Skip to content

PDF 生成模板编辑器

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

查看 GitHub

压缩&优化PDF文件 ​

给 Document.getFileData() 传入 optimize 选项即可获取压缩后的 PDF 数据。压缩在文档副本上进行,阅读器中打开的文档不受影响。

javascript
// 导入 ComPDFKit Web Demo 的 JS 文件。
import ComPDFKitViewer from "@compdfkit_pdf_sdk/webviewer";

const viewer = document.getElementById('webviewer');
ComPDFKitViewer({
  path: '/',
  initialDoc: 'Your PDF Url',
  licenseKey: 'Input your license here'
}, viewer)
  .then((instance) => {
    const { documentViewer } = instance.Core;
    documentViewer.addEventListener('documentLoaded', async () => {
      // 使用默认选项压缩。
      const bufferData = await documentViewer.getDocument().getFileData({ optimize: {} });
      const blobData = new Blob([bufferData], { type: 'application/pdf' });
    });
  });

压缩后的数据可以按照保存文档中的方式保存到本地或上传到服务器。

优化选项 ​

名称必填类型描述默认值
imageQuality否number图像重新压缩的质量,取值 0 到 1,值越小文件越小0.4
flags否number用按位或(|)组合的优化标志,见优化标志。传入后会替换默认标志5767283
ppi否object彩色、灰度和单色图像的分辨率:{ color, gray, mono },每项为 [upper, target]:高于 upper PPI 的图像降采样到 target PPIcolor: [225, 150]
gray: [225, 150]
mono: [450, 300]
fontSubset否boolean只嵌入文档中用到的字形true

默认标志只做无损清理:移除未使用的资源、空对象、无效链接和无效书签,压缩图像,使用 Flate 压缩,将 LZW 替换为 Flate,并优化页面内容。注释、表单、书签和嵌入字体都会保留。

下面的示例加大图像压缩力度,并移除页面缩略图、JavaScript 动作和文件附件:

javascript
const bufferData = await documentViewer.getDocument().getFileData({
  optimize: {
    imageQuality: 0.3,
    // 默认标志 + 移除文件附件 (1 << 14)、JavaScript 动作 (1 << 25) 和页面缩略图 (1 << 26)。
    flags: 5767283 | (1 << 14) | (1 << 25) | (1 << 26),
    ppi: { color: [120, 96], gray: [120, 96], mono: [120, 96] }
  }
});

optimize 可以和 getFileData() 的其他选项(如 flatten、xfdfString)一起使用。

获取引擎默认值 ​

Document.getOptimizeDefaults() 返回引擎的优化默认值,格式与 optimize 选项相同,可以调整后再传回。注意:引擎的默认标志(175767807)比上面的默认值更激进,还会移除书签、隐藏图层和 JavaScript 动作。

javascript
const doc = documentViewer.getDocument();
const defaults = await doc.getOptimizeDefaults();
// { flags: number, imageQuality: number, ppi: { color: [upper, target], gray: [upper, target], mono: [upper, target] } }

const bufferData = await doc.getFileData({ optimize: { ...defaults, imageQuality: 0.6 } });

优化标志 ​

值描述
1移除未使用的资源和元素
1 << 1移除空对象
1 << 2移除特殊属性
1 << 3优化嵌入字体的内存使用
1 << 4移除无效链接
1 << 5移除无效书签
1 << 6启用图像压缩
1 << 7移除书签
1 << 8移除注释
1 << 9移除表单
1 << 10移除多媒体内容
1 << 11移除文档信息(作者、标题等)
1 << 12移除元数据
1 << 13移除对象数据
1 << 14移除文件附件
1 << 15移除外部交叉引用
1 << 16移除其他应用程序数据
1 << 17移除隐藏图层
1 << 18合并可见图层
1 << 19使用 Flate (ZIP) 压缩
1 << 20将 LZW 压缩替换为 Flate
1 << 21移除未使用的目标对象
1 << 22优化页面内容
1 << 23启用快速 Web 浏览优化(线性化)
1 << 24移除表单提交/导入/重置动作
1 << 25移除 JavaScript 动作
1 << 26移除页面缩略图
1 << 27移除并替换图像
1 << 28移除标签
1 << 29移除打印设置
1 << 30移除搜索索引