java根据pdf模板生成pdf_Java 复制、压缩PDF文档

在日常办公中,掌握操作PDF文档的能力尤为重要。在前文中我使用Java程序来演示过如何合并和拆分PDF文档。本文将介绍如何复制和压缩文档。通常复制文档有两种形式,一种是跨文档复制,即将一个文档复制到另一个文档中;另一种则是在同一个文档中进行页面复制。压缩文档也有两个方式,一种是直接压缩文档内容;另一种则是通过压缩文档中的图片来实现文档大小的减少。

使用工具:Free Spire.PDF for Java(免费版)

Jar文件获取及导入:

方法1:通过E-iceblue中文官网下载获取jar包。解压后将lib文件夹下的Spire.Pdf.jar文件导入Java程序。(如下图)

7590cd468c48e1ec7a38953fd2f10bf0.png

方法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();    }}

复制效果:

3001a433e94cf9c98e881e45dcc73e59.png

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

复制效果:

edc2a4aa6bc772ad75d98ce0467eeb4c.png

【示例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();    }}

压缩效果:

3ec0c2f858a8c480cbc7f0e4b998c4e6.png

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

压缩效果:

2840594c08d4d876da649b9af4b54d71.png

(本文完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值