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();

}

}

壓縮效果:

(本文完)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。