在日常辦公中,掌握對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();
}
}
壓縮效果:
(本文完)