PDF 生成模板编辑器
开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。
使用 optimizeSaveAsCopy() 方法执行压缩并保存文档:
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("文档压缩成功");
}以下是一个完整的文档压缩示例,展示如何组合使用各种优化选项:
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();
}