Java 合并、拆分PDF文档

       随着PDF文档在日常工作学习中的运用越来越广泛,为了便于更好地储存和管理文档,不可避免地会遇到将多个PDF文档合为一个文档,或将一个PDF文档拆分成若干个文档的操作。本文就将详细介绍如何使用Java程序来对PDF文档进行合并及拆分。

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

Jar文件获取及导入:

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


方法2:通过maven仓库安装导入。具体安装详解参见此网页

【示例1】合并PDF文档

方法1加载三个独立的PDF文档,然后将第二、第三个PDF文档中的数据插入到第一个文档。

import com.spire.pdf.PdfDocument;

public class MergeDocument {    

public static void main(String[] args) {        

String[] files = new String[]                {

"C:\\Users\\Test1\\Desktop\\Sample1.pdf",                         "C:\\Users\\Test1\\Desktop\\Sample2.pdf",                         "C:\\Users\\Test1\\Desktop\\Sample3.pdf",                 };        

String outputFile = "output/MergeDocument.pdf";        

//创建PDFDocument示例并加载三个示例文档        

PdfDocument[] docs = new PdfDocument[files.length];        

PdfDocument doc = new PdfDocument();        

for (int i = 0; i < files.length; i++) {            

docs[i] = new PdfDocument();            

docs[i].loadFromFile(files[i]);         }        

//添加第一页并写入第一个示例文档的数据        

docs[0].appendPage(docs[1]);        

//将另外两个文档的数据插入新的页面        

for (int i = 0; i < docs[2].getPages().getCount(); i = i + 2) {             docs[0].insertPage(docs[2], i);         }        

// 保存文档        

docs[0].saveToFile(outputFile);        

doc.close();    

}

}

方法2通过流的方式加载三个示例文档,并使用 mergeFiles(streams)方法将多个PDF文档合并为一个PDF文档。

import com.spire.pdf.*;

import java.io.*;

public class MergeFilesByStream {    

public static void main(String[] args) throws FileNotFoundException {        

String outputFile = "output/mergeFilesByStream.pdf";        

FileInputStream stream1 = new FileInputStream(new File("C:\\Users\\Test1\\Desktop\\Sample1.pdf"));        

FileInputStream stream2 = new FileInputStream(new File("C:\\Users\\Test1\\Desktop\\Sample2.pdf"));        

FileInputStream stream3 = new FileInputStream(new File("C:\\Users\\Test1\\Desktop\\Sample3.pdf"));        

//加载PDF示例文档        

InputStream[] streams = new FileInputStream[]{stream1, stream2, stream3};        

//合并PDF文档        

PdfDocumentBase doc = PdfDocument.mergeFiles(streams);        

//保存文档        

doc.save(outputFile);        

doc.close();    

}

}

文档合并效果:


【示例2】拆分PDF文档

原PDF文档如下:

方式1将一个PDF文档均分为多个PDF(每个PDF包含1页)。

import com.spire.pdf.*;

public class SplitFile {    

public static void main(String[] args) {        

//加载PDF文档        

PdfDocument doc = new PdfDocument();         doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");        

//拆分为多个PDF文档        

doc.split("output/splitDocument-{0}.pdf", 0);        

doc.close();    

}

}

文档拆分效果:


方式2:将一个PDF文档拆分为2个或多个PDF每个PDF可包含不同的页数)。

以下代码将原PDF文档的第1-4页拆分一个PDF文档,第5-9页拆分为另一个PDF文档:

import com.spire.pdf.*;

import com.spire.pdf.graphics.PdfMargins;

import java.awt.geom.Point2D;

public class SplitFile2 {    

public static void main(String[] args) {        

//加载PDF文档        

PdfDocument doc = new PdfDocument();         doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");        

//新建一个PDF文档        

PdfDocument newDoc1 = new PdfDocument();        

PdfPageBase page;        

//将原PDF文档的第1页到3页页添加至新建的PDF        

for(int i = 0;i<4;i++)        

{ page = newDoc1.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0));         doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0));         }         

//保存文档        

newDoc1.saveToFile("output/SplitDoc1.pdf");        

//新建另一个PDF文档         

PdfDocument newDoc2 = new PdfDocument();        

//将原PDF文档的第4至9页添加至新建的PDF        

for(int i = 4;i<9;i++)        

{ page = newDoc2.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0));         doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0));         }        

//保存文档        

newDoc2.saveToFile("output/SplitDoc2.pdf");    

}

}

文档拆分效果:


(本文完)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容

  • 在一篇文章里,配有与文本信息相得益彰的图片,不仅能够活跃与美化版面,同时也有利于提高文章的可读性和阅读效果,...
    Tina_Tang阅读 1,458评论 0 3
  • 页眉和页脚通常是显示文档的附加信息,常用来插入页码、时间、日期、个人信息、微标等。特别是其中插入的页码,通...
    Tina_Tang阅读 1,936评论 0 1
  • Last login: Fri Nov 17 13:00:32 on console localhost:~ fc...
    瀚海星扬阅读 644评论 0 0
  • 想,和你去清迈的稻田里 站着等鸟 等它来,带你走,带你飞 等你告诉我 天上好,还是地上好 你回过头: 有我的地方,...
    米米立阅读 132评论 0 0
  • 凉夏。 是我轻轻的一丝微凉 落在窗前的麻雀碎语片刻,又蹬脚和远方。 阳光万物的情人。 守候。 盛夏 窗前的我 凝思...
    一帘清菏阅读 203评论 2 1