在日常办公中,掌握操作PDF文档的能力尤为重要。在前文中我使用Java程序来演示过如何合并和拆分PDF文档。本文将介绍如何复制和压缩文档。通常复制文档有两种形式,一种是跨文档复制,即将一个文档复制到另一个文档中;另一种则是在同一个文档中进行页面复制。压缩文档也有两个方式,一种是直接压缩文档内容;另一种则是通过压缩文档中的图片来实现文档大小的减少。
使用工具:Free Spire.PDF for Java(免费版)
Jar文件获取及导入:
方法1:通过E-iceblue中文官网下载获取jar包。解压后将lib文件夹下的Spire.Pdf.jar文件导入Java程序。(如下图)
方法2:通过maven仓库安装导入。具体安装教程参见E-iceblue中文官网。
【示例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();
}
}
压缩效果:
(本文完)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。