Java 复制、压缩PDF文档

在日常办公中,掌握对PDF文档的操作能力尤为重要。在前文中我使用Java程序来演示过如何合并和拆分PDF文档。本文将介绍如何复制和压缩文档。通常复制文档有两种形式,一种是跨文档复制,即将一个文档复制到另一个文档中;另一种则是在同一个文档中进行页面复制。压缩文档也有两个方式,一种是直接压缩文档内容;另一种则是通过压缩文档中的图片来实现文档大小的减少。

使用工具:Free Spire.PDF for Java(免费版)

Jar文件获取及导入:

方法1通过官网下载获取jar包。解压后将lib文件夹下的Spire.Pdf.jar文件导入Java程序。(如下图)

方法2通过maven仓库安装导入。具体安装教程参见此网页。

【示例1】复制文档

Part 1 跨文档复制

import com.spire.pdf.*;

import com.spire.pdf.graphics.PdfMargins;

import com.spire.pdf.graphics.PdfTemplate;

import java.awt.*;

import java.awt.geom.Dimension2D;

public class Copy1 {

public static void main(String[] args) {

//加载两个PDF文档

PdfDocument pdf1 =new PdfDocument("C:\\Users\\Test1\\Desktop\\Pdf1.pdf");

PdfDocument pdf2 =new PdfDocument("C:\\Users\\Test1\\Desktop\\Pdf2.pdf");

//获取Pdf1的第一页,并根据页面创建模板

PdfPageBase page = pdf1.getPages().get(0);

Dimension2D size = page.getSize();

PdfTemplate template = page.createTemplate();

//在Pdf2中第一页位置插入从Pdf1中绘制的模板

pdf2.getPages().insert(0,size,new PdfMargins(0,0));

pdf2.getPages().get(0).getCanvas().drawTemplate(template,new Point(0,0));

//保存pdf2

pdf2.saveToFile("output/result1.pdf",FileFormat.PDF);

pdf2.dispose();

}

}

复制效果:

Part 2 在同一个文档内复制

import com.spire.pdf.*;

import com.spire.pdf.graphics.PdfMargins;

import com.spire.pdf.graphics.PdfTemplate;

import java.awt.*;

import java.awt.geom.Dimension2D;

public class Copy2 {

public static void main(String[] args) {

//加载测试文档

PdfDocument pdf =new PdfDocument("C:\\Users\\Test1\\Desktop\\File1.pdf");

//获取第一页,并将于页面创建模板

PdfPageBase page = pdf.getPages().get(0);

Dimension2D size = page.getSize();

PdfTemplate template = page.createTemplate();

//在文档末循环添加两张绘制好的页面模板

for(int i=0; i<2; i++){

page = pdf.getPages().add(size,new PdfMargins(0));

page.getCanvas().drawTemplate(template,new Point(0,0));

}

//在第一页插入一张绘制好的页面模板

pdf.getPages().insert(0,size,new PdfMargins(0,0));

pdf.getPages().get(0).getCanvas().drawTemplate(template,new Point(0,0));

//保存文档

pdf.saveToFile("output/result2.pdf",FileFormat.PDF);

}

}

复制效果:

【示例2】压缩文档

Part 1 压缩文档内容

import com.spire.pdf.*;

public class CompressPDFContent {

public static void main(String[] args) {

//加载PDF示例文档

PdfDocument document =new PdfDocument("C:\\Users\\Test1\\Desktop\\Sample.pdf");

//禁用incremental update

document.getFileInfo().setIncrementalUpdate(false);

//设置PDF文档的压缩级别

document.setCompressionLevel(PdfCompressionLevel.Best);

//保存并关闭文档

document.saveToFile("output/CompressPDFcontent.pdf");

document.close();

}

}

压缩效果:

Part 2 压缩文档中的图片

首先提取原PDF文档中的图片,通过降低图片质量,使图片变小,然后用缩小后的图片替换原文档中的图片来减小PDF文档的大小。

import com.spire.pdf.*;

import com.spire.pdf.exporting.PdfImageInfo;

import com.spire.pdf.graphics.PdfBitmap;

public class CompressPDFImage {

public static void main(String[] args) {

//加载PDF文档

PdfDocument document =new PdfDocument("C:\\Users\\Test1\\Desktop\\Sample2.pdf");

//禁用incremental update

document.getFileInfo().setIncrementalUpdate(false);

//遍历文档所有页面

for (int i =0; i < document.getPages().getCount(); i++) {

//提取页面中的图片

PdfPageBase page = document.getPages().get(i);

PdfImageInfo[] images = page.getImagesInfo();

if (images !=null && images.length >0)

//遍历所有图片

for (int j =0; j < images.length; j++) {

PdfImageInfo image = images[j];

PdfBitmap bp =new PdfBitmap(image.getImage());

//降低图片的质量

bp.setQuality(20);

//用压缩后的图片替换原文档中的图片

page.replaceImage(j, bp);

}

}

//保存并关闭文档

document.saveToFile("output/CompressPDFImage.pdf");

document.close();

}

}

压缩效果:

(本文完)

你可能感兴趣的:(Java 复制、压缩PDF文档)