pdf文件压缩Java工具

使用Apache pdfbox 工具包对pdf文件进行压缩

思路就是使用工具包将pdf文件拆分为图片,然后对图片进行压缩后再合并为pdf

导包

<dependency>
	<groupId>org.apache.pdfbox</groupId>
	<artifactId>pdfbox</artifactId>
	<version>2.0.27</version>
</dependency>

编码

public class PdfBoxUtil {
	/**
	 * pdf文件转图片
	 * 
	 * @param filePath     pdf文件所在路径
	 * @param targetFolder 生成的图片的文件夹
	 * @param scale        倍率 1:72DPI 2:142DPI
	 * @throws IOException
	 */
	public static void pdfToImage(String filePath, String targetFolder, float scale) throws IOException {
		File file = new File(filePath);
		try (PDDocument document = PDDocument.load(file)) {

			PDFRenderer renderer = new PDFRenderer(document);

			int numberOfPages = document.getNumberOfPages();
			for (int i = 0; i < numberOfPages; i++) {
				BufferedImage image = renderer.renderImage(i, 2f);
				ImageIO.write(image, "JPEG", new File(targetFolder + i + ".jpg"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 图片转pdf
	 * 
	 * @param imageFolder 图片所在文件夹
	 * @param filePath
	 */
	public static void imageToPdf(String imageFolder, String filePath) {
		File file = new File(imageFolder);
		File[] listFiles = file.listFiles();

		List<File> imageList = new ArrayList<File>();

		for (File imageFile : listFiles) {
			imageList.add(imageFile);
		}

		// 排序
		imageList.sort(new Comparator<File>() {

			@Override
			public int compare(File f1, File f2) {
				String name1 = f1.getName();
				String[] split1 = name1.split("\\.");
				int int1 = Integer.parseInt(split1[0]);

				String name2 = f2.getName();
				String[] split2 = name2.split("\\.");
				int int2 = Integer.parseInt(split2[0]);

				return int1 - int2;
			}
		});
		try (PDDocument document = new PDDocument()) {
			for (int i = 0; i < imageList.size(); i++) {
				File imageFile = imageList.get(i);
				BufferedImage bufferedImage = ImageIO.read(new FileInputStream(imageFile));
				int height = bufferedImage.getHeight();
				int width = bufferedImage.getWidth();

				PDPage page = new PDPage();
				// 设置宽和高
				PDRectangle rectangle = new PDRectangle(width, height);
				page.setMediaBox(rectangle);

				document.addPage(page);
				PDImageXObject pdImage = PDImageXObject.createFromFileByExtension(imageFile, document);
				PDPageContentStream contentStream = new PDPageContentStream(document, page);
				contentStream.drawImage(pdImage, 0, 0);
				contentStream.close();
			}
			document.save(filePath);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws IOException {
//		pdfToImage("C:\\Users\\admin\\Desktop\\系统操作手册.pdf", "C:\\Users\\admin\\Desktop\\temp\\qwe1\\");

		imageToPdf("C:\\Users\\admin\\Desktop\\temp\\qwe1\\", "C:\\Users\\admin\\Desktop\\temp\\系统操作手册2.pdf");
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值