Skip to content

PDF 生成模板编辑器

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

查看 GitHub

执行文档压缩

基本压缩示例

使用 optimizeSaveAsCopy() 方法执行压缩并保存文档:

java
CPDFDocument document = new CPDFDocument();
document.open("test.pdf");
CPDFOptimizeOptions optimizeOption = document.getOptimizeOptions();

// 配置优化选项
int flags = 
    CPDFOptimizeOption.OPTIMIZE_FLAG_RMNOTUSE |
    CPDFOptimizeOption.OPTIMIZE_FLAG_BCOMPRESSIMAGE |
    CPDFOptimizeOption.OPTIMIZE_FLAG_USEFLATE;
optimizeOption.setOptimizeFlags(flags);

// 配置图像压缩
optimizeOption.setImageQuality(60.0f);

// 执行压缩并保存
// 参数 fontSubset: true 表示启用字体子集化
bool success = document.optimizeSaveAsCopy("output_optimized.pdf", true);

if (success)
{
    System.out.println("文档压缩成功");
}

综合压缩示例

以下是一个完整的文档压缩示例,展示如何组合使用各种优化选项:

java
public void CompressDocument(string inputPath, string outputPath)
{
    // 打开文档
    CPDFDocument document = new CPDFDocument();
		document.open("test.pdf");
    if (document == null)
    {
        return;
    }

    // 获取原始文件大小
    File originalFile = new File(inputPath);
    long originalSize = originalFile.length();

    // 获取优化选项
    CPDFOptimizeOptions optimizeOption = document.getOptimizeOptions();
    if (optimizeOption == null)
    {
        return;
    }

    // 配置优化标志 - 综合优化
    int flags = 
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMNOTUSE |           // 移除未使用资源
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMEPTOBJ |           // 移除空对象
        CPDFOptimizeOptions.OPTIMIZE_FLAG_BCOMPRESSIMAGE |     // 启用图像压缩
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMDOCINFO |          // 移除文档信息
        CPDFOptimizeOptions.OPTIMIZE_FLAG_RMMEDTADATA |        // 移除元数据
        CPDFOptimizeOptions.OPTIMIZE_FLAG_USEFLATE |           // 使用 Flate 压缩
        CPDFOptimizeOptions.OPTIMIZE_FLAG_OPTIMIZEPAGECONTENT; // 优化页面内容
    optimizeOption.setOptimizeFlags(flags);

    // 配置图像压缩选项
    CPDFImageOptimizeOptions imageOption = new CPDFImageOptimizeOptions();
    imageOption.upperPpi = 225;
    imageOption.targetPpi = 150;
    imageOption.compressAlgorithm = CPDFCompressAlgorithm.JPEG2000;
    imageOption.quality = 50;
    optimizeOption.setColorImageOptions(imageOption);

    // 将配置写回文档
    boolean setOk = document.setOptimizeOptions(optimizeOption);
    if (!setOk) {
        document.close();
        return;
    }
  
    // 执行压缩
    bool success = document.optimizeSaveAsCopy(outputPath, true);

    if (success) {
        // 计算压缩率
        File compressedFile = new File(outputPath);
        long compressedSize = compressedFile.length();
        double compressionRatio = (1.0 - (double) compressedSize / originalSize) * 100.0;

        System.out.println("压缩完成!");
        System.out.printf("原始大小: %.2f KB%n", originalSize / 1024.0);
        System.out.printf("压缩后大小: %.2f KB%n", compressedSize / 1024.0);
        System.out.printf("压缩率: %.1f%%%n", compressionRatio);
    } else {
        System.out.println("压缩失败");
    }

    // 释放资源
    document.close();
}