原始资源来自:https://www.cnblogs.com/zhexuejun/p/13257522.html
import com.aspose.pdf.Document;
public class OptimizePdf {
public static void optimize(String source, String target) {
Document doc = new Document(source);
//设置压缩属性
Document.OptimizationOptions opt = new Document.OptimizationOptions();
//删除PDF不必要的对象
opt.setRemoveUnusedObjects(true);
//链接重复流
opt.setLinkDuplcateStreams(false);
//删除未使用的流
opt.setRemoveUnusedStreams(false);
//删除不必要的字体
opt.setUnembedFonts(true);
//压缩PDF中的图片
opt.setCompressImages(true);
//图片压缩比, 0 到100可选,越低压缩比越大
opt.setImageQuality(10);
doc.optimizeResources(opt);
//优化web的PDF文档
doc.optimize();
doc.save(target);
}
public static void main(String[] args) {
String source = "E:/SETUP/1.pdf";
String target = "E:/SETUP/1.pdf";
optimize(source, target);
}
}
第二种 使用thumbnailator类库压缩图片,因为JDK的ImageIO支持的图片格式并不丰富,所以需要引入增强的twelvemonkeys的ImageIO,由于ImageIO可以自动发现,
所以引入twelvemonkeys的依赖即可,此处,由于我项目只需要tif的格式支持,为了减少多余jar,只引入了imageio-tiff,其他格式的需要依据需求可以去中央仓库找
依赖如下:
复制代码
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.twelvemonkeys.imageio/imageio-tiff -->
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-tiff</artifactId>
<version>3.5</version>
</dependency>
复制代码
压缩图片的代码如下:
复制代码
/**
* @date 2020-7-6
* @description 压缩图片
*/
public static void optimizeImage(String source, String target) {
try {
Thumbnails.of(source) //原图片
.scale(scale) //分辨率比例
.outputQuality(imageQuality) //图片质量
.outputFormat("JPEG") //目标文件格式
.toFile(target); //目标图片
} catch (Exception e) {
e.printStackTrace();
}
}
复制代码
最后将压缩后图片转为PDF,可以显著的减少PDF大小。