Java 復(fù)制、壓縮PDF文檔

在日常辦公中,掌握對(duì)PDF文檔的操作能力尤為重要。在前文中我使用Java程序來演示過如何合并和拆分PDF文檔。本文將介紹如何復(fù)制和壓縮文檔。通常復(fù)制文檔有兩種形式,一種是跨文檔復(fù)制,即將一個(gè)文檔復(fù)制到另一個(gè)文檔中;另一種則是在同一個(gè)文檔中進(jìn)行頁面復(fù)制。壓縮文檔也有兩個(gè)方式,一種是直接壓縮文檔內(nèi)容;另一種則是通過壓縮文檔中的圖片來實(shí)現(xiàn)文檔大小的減少。

使用工具:Free Spire.PDF for Java(免費(fèi)版)

Jar文件獲取及導(dǎo)入:

方法1通過官網(wǎng)下載獲取jar包。解壓后將lib文件夾下的Spire.Pdf.jar文件導(dǎo)入Java程序。(如下圖)

方法2通過maven倉庫安裝導(dǎo)入。具體安裝教程參見此網(wǎng)頁

【示例1】復(fù)制文檔

Part 1 跨文檔復(fù)制

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) {

//加載兩個(gè)PDF文檔

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

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

//獲取Pdf1的第一頁,并根據(jù)頁面創(chuàng)建模板

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

}

}

復(fù)制效果:

Part 2 在同一個(gè)文檔內(nèi)復(fù)制

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

//獲取第一頁,并將于頁面創(chuàng)建模板

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

Dimension2D size = page.getSize();

PdfTemplate template = page.createTemplate();

//在文檔末循環(huán)添加兩張繪制好的頁面模板

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

}

}

復(fù)制效果:

【示例2】壓縮文檔

Part 1 壓縮文檔內(nèi)容

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

//設(shè)置PDF文檔的壓縮級(jí)別

document.setCompressionLevel(PdfCompressionLevel.Best);

//保存并關(guān)閉文檔

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

document.close();

}

}

壓縮效果:

Part 2 壓縮文檔中的圖片

首先提取原PDF文檔中的圖片,通過降低圖片質(zhì)量,使圖片變小,然后用縮小后的圖片替換原文檔中的圖片來減小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());

//降低圖片的質(zhì)量

bp.setQuality(20);

//用壓縮后的圖片替換原文檔中的圖片

page.replaceImage(j, bp);

}

}

//保存并關(guān)閉文檔

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

document.close();

}

}

壓縮效果:

(本文完)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容