在日常办公中,掌握操作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:甥敳獲Test1DesktopPdf1.pdf"); PdfDocument pdf2 = new PdfDocument("C:甥敳獲Test1DesktopPdf2.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:甥敳獲Test1DesktopFile1.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:甥敳獲Test1DesktopSample.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:甥敳獲Test1DesktopSample2.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(); }}
压缩效果:
(本文完)