java pdf合并_Java 合并、拆分PDF文档

本文将介绍如何在Java程序中合并及拆分PDF文档,合并文档时,包括合并多个不同PDF文档为一个文档,以及合并PDF文档的不同页面为一页;拆分文档是,包括将PDF文档按每一页拆分,以及按指定页数范围来拆分。下面将通过代码演示。

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

Jar

文件获取及导入:

方法

1

:通过官网

下载包。下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入java程序。

方法

2

:可通过

maven仓库安装

导入到maven项目。

Java

代码示例

一、合并

1. 合并PDF文档

import com.spire.pdf.*;

import java.io.*;

public class Merge2 {

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

String outputFile = "output/mergeFilesByStream.pdf";

FileInputStream stream1 = new FileInputStream(new File("sample1.pdf"));

FileInputStream stream2 = new FileInputStream(new File("sample2.pdf"));

FileInputStream stream3 = new FileInputStream(new File("sample3.pdf"));

//加载PDF示例文档

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

//合并PDF文档

PdfDocumentBase doc = PdfDocument.mergeFiles(streams);

//保存文档

doc.save(outputFile);

doc.close();

}

}

合并前:

f0a443202b0cf288ba76e2ba54594a47.png

合并后:

c3a9d1e257139cc0f23c2b947876bdf2.png

2. 合并PDF页面

import com.spire.pdf.*;

import com.spire.pdf.graphics.PdfBlendMode;

import com.spire.pdf.graphics.PdfTemplate;

import java.awt.geom.Point2D;

public class MergePages {

public static void main(String[] args) {

//加载两个PDF文档

PdfDocument pdf1 = new PdfDocument();

pdf1.loadFromFile("test1.pdf");

PdfDocument pdf2 = new PdfDocument();

pdf2.loadFromFile("test2.pdf");

//根据pdf1的第一页绘制模板

PdfTemplate template = pdf1.getPages().get(0).createTemplate();

//获取pdf2的第二页

PdfPageBase page = pdf2.getPages().get(1);

//设置透明度和重叠样式

page.getCanvas().setTransparency(1f,1f, PdfBlendMode.Normal);

//将pdf1的第一页内容写入pdf2的第二页中的指定位置

page.getCanvas().drawTemplate(template,new Point2D.Float(0,350));

//保存pdf2

pdf2.saveToFile("MergePages.pdf",FileFormat.PDF);

pdf2.dispose();

}

}

合并前:

0f86e68aa72ec8ad9fa230030db14727.png

合并后:

67eb11f392bf0a8bf06d4a2528be0752.png

二、拆分

测试文档如下:

8ca15bbba5d913a408edf5b2f0724beb.png

1. 按每一页拆分

import com.spire.pdf.*;

public class SplitPDF1 {

public static void main(String[] args)

{

//加载需要拆分的PDF文档

PdfDocument doc = new PdfDocument();

doc.loadFromFile("test.pdf");

//调用方法split()将PDF文档按每一页拆分为单独的文档

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

doc.close();

}

}

拆分结果:

7d5e26716ff36f13806ade3ce11fad3a.png

2. 按指定页数范围拆分

import com.spire.pdf.*;

import com.spire.pdf.graphics.PdfMargins;

import java.awt.geom.Point2D;

public class SplitPDF2 {

public static void main(String[] args)

{

//加载需要拆分的PDF文档

PdfDocument doc = new PdfDocument();

doc.loadFromFile("test.pdf");

//新建第1个PDF文档1

PdfDocument newpdf1 = new PdfDocument();

PdfPageBase page;

//将原PDF文档的第1、2页拆分,并保存到newpdf1

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

{

page = newpdf1.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0));

doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0));

}

newpdf1.saveToFile("split/result1.pdf");

//新建第2个PDF文档

PdfDocument newpdf2 = new PdfDocument();

//将原PDF文档的第3、4页拆分,并保存到newpdf2

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

{

page = newpdf2.getPages().add(doc.getPages().get(i).getSize(), new PdfMargins(0));

doc.getPages().get(i).createTemplate().draw(page, new Point2D.Float(0,0));

}

newpdf2.saveToFile("split/result2.pdf");

}

}

拆分结果:

dfc50e5ffbaccead3d308f1423476ea5.png

(本文完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU4405 期望

对于期望&#xff0c;首先&#xff0c;对于这个公式中p表示概率&#xff0c;x表示随机变量 展开则为 ex p1*x1p2*x2p3*x3....... 对于本题 假设 ex[ i ]表示当前 i 走到 n 的期望值。所以若 i 处没有飞机&#xff0c;ex[ i ]sigma(1/6*ex[ik])1 其中(k1...6) &#xff08;1表示…

调用本地电脑摄像头并进行按P进行捕获照片并保存,按下Q退出

调用本地电脑摄像头并进行按P进行捕获照片并保存&#xff0c;按下Q退出 灰度摄像头显示&#xff1a; import cv2 cap cv2.VideoCapture(0) if not cap.isOpened():print("Cannot open camera")exit() while True:# 逐帧捕获ret, frame cap.read()# 如果正确读取帧…

intersect函数_PHP array_intersect()函数与示例

intersect函数PHP array_intersect()函数 (PHP array_intersect() Function ) array_intersect() function is used to find the matched elements from two or more elements. Function “array_intersect()” compares the values of the first array with the other arrays …

很全的SQL注入语句

1、返回的是连接的数据库名and db_name()>02、作用是获取连接用户名and user>03、将数据库备份到Web目录下面;backup database 数据库名 to diskc:\inetpub\wwwroot\1.db;--4、显示SQL系统版本and 1(select VERSION) 或and 1convert(int,version)--5、判断xp_cmdshell扩展…

使用DataTable更新数据库

1、修改数据 DataRow dr hRDataSet.Tables["emp"].Rows.Find(textBox3.Text);//DataRow dr hRDataSet.Tables["emp"].Select("id"textBox3.Text)[0];dr.BeginEdit();dr["name"] textBox1.Text;dr.EndEdit();SqlCommandBuilder cmdn…

java异常体系_JAVA异常体系结构详解

一、什么是异常异常&#xff1a;程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。(在Java等面向对象的编程语言中)异常本身是一个对象&#xff0c;产生异常就是产生了一个异常对象。 ——百度百科二、异常体系Java把异常当作对象来处理&#xf…

对照片质量进行压缩

对照片质量进行压缩 其实无论是jpg还是png都是已经压缩编码化的格式罢了&#xff0c;原图片的大小要远远大于压缩编码后的格式 1&#xff0c;像素&#xff1a;图片放大到一定程度之后的一个个的小方块 2&#xff0c;RGB&#xff1a;每一个像素&#xff08;小方块&#xff09;都…

Silverlight访问 Apache服务器(Tomcat,Geronimo)中部署的Webservice

Silverlight 访问 Apache服务器中的Webservice 开发环境 Vs2010 、 Silverlight4 、 Java Jdk1.6 U 21 、 Apache-tomcat-6.0.20 、 Myeclipse8.5 、 Apache-ant-1.8.1 、 Axis2 、 Geronimo-tomcat6-javaee5-2.2. 下载地址&#xff1a; Apache-tomcat &#xff1a; http://apa…

那些帮助你成为优秀前端工程师的讲座——《性能篇》

这篇文章是前端优秀讲座和讨论列表系列连载第七篇&#xff0c;介绍前端性能优化技巧。前端领域发展迅速&#xff0c;只有时刻掌握前端发展趋势和技术动态&#xff0c;学习前沿的开发思想和理念才能让自己跟上时代的步伐&#xff0c;保持自己的技术优势。 您可能感兴趣的相关文章…

mca终端_MCA的完整形式是什么?

mca终端1)MCA&#xff1a;计算机应用硕士 (1) MCA: Master of Computer Application) MCA is an abbreviation of Master of Computer Application. It is a masters degree program for post-graduation in Computer applications. This post-graduate course duration is abo…

钢铁侠java_现代版“钢铁侠”,无所不能的程序员,java工程师实现人造器官!...

一位名叫利亚姆泽贝迪(Liam Zebedee)的软件工程师已经厌倦了糖尿病患者的生活挑战&#xff0c;因此他决定入侵他的胰岛素泵&#xff0c;并将其转变成一种崭新的高科技胰腺胰腺。Zebedee详细介绍了查找和订购零件的过程&#xff0c;为智能胰岛素泵编写软件的代码以及在其博客中组…

Windows下的Memcache安装 (转)

Windows下的Memcache安装&#xff1a;1. 下载memcache的windows稳定版&#xff0c;解压放某个盘下面&#xff0c;比如在c:\memcached2. 在终端&#xff08;也即cmd命令界面&#xff09;下输入 ‘c:\memcached\memcached.exe -d install’ 安装3. 再输入&#xff1a; ‘c:\memca…

C#中实现js中的eval函数功能

在js中有eval函数&#xff0c;比如 eval&#xff08;‘33*4’&#xff09;结果为15&#xff1b; 但C#中想要完成这样的功能&#xff0c;却没有相应的函数&#xff0c;可以用sql语句的方式实现&#xff0c;比如&#xff0c;执行 select 33*4 的方式。 可以先构造公式 Formula …

查看照片的指定位置的像素点值,并在照片中绘制一条指定像素颜色的线段

查看照片的指定位置的像素点值&#xff0c;并在照片中绘制一条指定像素的线段 import cv2 img cv2.imread(E:\Python-workspace\OpenCV\yanyu/beyond.png,1)#1为彩色图片&#xff0c;0为灰度图片 (b,g,r) img[20,20]#取照片的(20,20)处的像素点&#xff0c;左上角为(0,0)&am…

大数据和云计算涉及的技术_云计算涉及的风险

大数据和云计算涉及的技术In todays life using of cloud is very common among people, we use different clouds like Google cloud, cloud Azure etc. to store our photos, Videos, documents, data etc. to save space as well as we think that we will be able to retri…

int 转interger java_Java中Integer和int之间的转换

int到Integer:int a3;Integer Anew Integer(a);或:Integer AInteger.valueOf(a);Integer到int:Integer Anew Integer(5);int aA.intValue();至于Integer.parseInt(String str)则是将String类型转为int类型。int类型是放在栈空间的&#xff0c;Integer是作为对象放在堆空间的;in…

图像分割-二阶导数零交叉点的含义

已知&#xff1a; 二阶导数在灰度斜坡和灰度台阶过渡处会产生双边缘响应。 二阶导数的符号可以用于确定边缘的过渡是从亮到暗还是暗到亮。 斜坡开始处&#xff0c;二阶导数为负&#xff0c;斜坡结束二阶导数为正&#xff0c;斜坡上&#xff0c;二阶导数为0.&#xff08;亮到暗…

采购子系统-流程图、表结构、内容简介

设计说明&#xff1a; 流程图&#xff1a; 表结构&#xff1a; -- {*******************************************************} -- { } -- { GSP } -- { …

题目53:Goldbach's Conjecture

http://ac.jobdu.com/problem.php?cid1040&pid52 题目描述&#xff1a;Goldbachs Conjecture: For any even number n greater than or equal to 4, there exists at least one pair of prime numbers p1 and p2 such that n p1 p2. This conjecture has not been prov…

Anaconda下安装TensorFlow和OpenCV(都是心血呀~)

从国庆放假到现在的6号&#xff0c;我整整搞了将近五天多。安装个TensorFlow和OpenCV不下五次&#xff0c;各种问题各种解决&#xff0c;下载后卸载&#xff0c;卸载后下载&#xff0c;我快吐了啊这个国庆&#xff0c;但是最终还是达到了自己的目标&#xff08;我太难了&#x…