依赖导入

com.itextpdf

itextpdf

5.5.13

org.apache.pdfbox

pdfbox

2.0.15

org.apache.pdfbox

fontbox

2.0.15

工具代码

import com.itextpdf.text.Document;

import com.itextpdf.text.pdf.PdfCopy;

import com.itextpdf.text.pdf.PdfImportedPage;

import com.itextpdf.text.pdf.PdfReader;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

/**

* @author zh

* @data 2019/10/28 16:20

* 说明:TODO

*/

public class TestPDF {

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

}

/**

* pdf拷贝到新文件,

* @param pdfFile

* @param newFile

* @param from 从第几页考

* @param end 考到第几页

*/

public static void copyPdfFile(String pdfFile, String newFile, int from, int end) {

Document document = null;

PdfCopy copy = null;

try {

PdfReader reader = new PdfReader(pdfFile);

int n = reader.getNumberOfPages();

if (end == 0) {

end = n;

}

ArrayList savepaths = new ArrayList();

String staticpath = pdfFile.substring(0, pdfFile.lastIndexOf("\\") + 1);

String savepath = staticpath + newFile;

savepaths.add(savepath);

document = new Document(reader.getPageSize(1));

copy = new PdfCopy(document, new FileOutputStream(savepaths.get(0)));

document.open();

for (int j = from; j <= end; j++) {

document.newPage();

PdfImportedPage page = copy.getImportedPage(reader, j);

copy.addPage(page);

}

document.close();

}catch (Exception e){

e.printStackTrace();

}

}

/**

* 将所有的pdf切割成一页

*/

public static void cutOnePageFormPDF(String pdfFile, String toPath,String fileName){

Document document = null;

PdfCopy copy = null;

try {

PdfReader reader = new PdfReader(pdfFile);

int n = reader.getNumberOfPages();

for(int i=1; i <= n; i++){

document = new Document(reader.getPageSize(1));

copy = new PdfCopy(document, new FileOutputStream(toPath+fileName+"-"+i+".pdf"));

document.open();

document.newPage();

PdfImportedPage page = copy.getImportedPage(reader, i);

copy.addPage(page);

document.close();

}

System.out.println(n);

}catch (Exception e){

e.printStackTrace();

}

}

/**

* 多个pdf合并

*/

public static void sumPDFFile(String newfilePath, String... filePaths){

int length = filePaths.length;

Document document = null;

PdfCopy copy = null;

try {

if(length > 0){

document = new Document(new PdfReader(filePaths[0]).getPageSize(1));

copy = new PdfCopy(document, new FileOutputStream(newfilePath));

document.open();

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

PdfReader reader = new PdfReader(filePaths[i]);

for(int j=1; j <= reader.getNumberOfPages(); j++){

document.newPage();

PdfImportedPage page = copy.getImportedPage(reader, j);

copy.addPage(page);

}

}

document.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 将PDF按页数每页转换成一个jpg图片

* @param filePath

* @return

*/

public static List pdfToImagePath(String filePath){

List list = new ArrayList<>();

String fileDirectory = filePath.substring(0,filePath.lastIndexOf("."));//获取去除后缀的文件路径

String imagePath;

File file = new File(filePath);

try {

File f = new File(fileDirectory);

if(!f.exists()){

f.mkdir();

}

PDDocument doc = PDDocument.load(file);

PDFRenderer renderer = new PDFRenderer(doc);

int pageCount = doc.getNumberOfPages();

for(int i=0; i

// 方式1,第二个参数是设置缩放比(即像素)

// BufferedImage image = renderer.renderImageWithDPI(i, 296);

// 方式2,第二个参数是设置缩放比(即像素)

BufferedImage image = renderer.renderImage(i, 1.8f); //第二个参数越大生成图片分辨率越高,转换时间也就越长

imagePath = fileDirectory + "/"+i + ".jpg";

ImageIO.write(image, "PNG", new File(imagePath));

list.add(imagePath);

}

doc.close(); //关闭文件,不然该pdf文件会一直被占用。

} catch (IOException e) {

e.printStackTrace();

}

return list;

}

/**

* @Description pdf转成一张图片

* @created 2019年4月19日 下午1:54:13

* @param pdfFile

* @param outpath

*/

private static void pdf2multiImage(String pdfFile, String outpath) {

try {

InputStream is = new FileInputStream(pdfFile);

PDDocument pdf = PDDocument.load(is);

int actSize = pdf.getNumberOfPages();

List piclist = new ArrayList();

for (int i = 0; i < actSize; i++) {

BufferedImage image = new PDFRenderer(pdf).renderImageWithDPI(i,130, org.apache.pdfbox.rendering.ImageType.RGB);

piclist.add(image);

}

yPic(piclist, outpath);

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 将宽度相同的图片,竖向追加在一起 ##注意:宽度必须相同

* @param piclist 文件流数组

* @param outPath 输出路径

*/

public static void yPic(List piclist, String outPath) {// 纵向处理图片

if (piclist == null || piclist.size() <= 0) {

System.out.println("图片数组为空!");

return;

}

try {

int height = 0, // 总高度

width = 0, // 总宽度

_height = 0, // 临时的高度 , 或保存偏移高度

__height = 0, // 临时的高度,主要保存每个高度

picNum = piclist.size();// 图片的数量

int[] heightArray = new int[picNum]; // 保存每个文件的高度

BufferedImage buffer = null; // 保存图片流

List imgRGB = new ArrayList(); // 保存所有的图片的RGB

int[] _imgRGB; // 保存一张图片中的RGB数据

for (int i = 0; i < picNum; i++) {

buffer = piclist.get(i);

heightArray[i] = _height = buffer.getHeight();// 图片高度

if (i == 0) {

width = buffer.getWidth();// 图片宽度

}

height += _height; // 获取总高度

_imgRGB = new int[width * _height];// 从图片中读取RGB

_imgRGB = buffer.getRGB(0, 0, width, _height, _imgRGB, 0, width);

imgRGB.add(_imgRGB);

}

_height = 0; // 设置偏移高度为0

// 生成新图片

BufferedImage imageResult = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

for (int i = 0; i < picNum; i++) {

__height = heightArray[i];

if (i != 0) _height += __height; // 计算偏移高度

imageResult.setRGB(0, _height, width, __height, imgRGB.get(i), 0, width); // 写入流中

}

File outFile = new File(outPath);

ImageIO.write(imageResult, "jpg", outFile);// 写图片

} catch (Exception e) {

e.printStackTrace();

}

}

}

java 裁剪 pdf_Java PDF 切割、截取、合并工具类、转图片等相关推荐

  1. Java基础之PDF文件的合并

    1.首先下载一个jar包:pdfbox-app-1.7.1.jar 2.代码如下: package com;import java.io.File; import java.io.IOExceptio ...

  2. java删减pdf内容合并_[Java教程]Java基础之PDF文件的合并

    [Java教程]Java基础之PDF文件的合并 0 2017-07-28 00:00:45 1.首先下载一个jar包:pdfbox-app-1.7.1.jar 2.代码如下:package com;i ...

  3. PDF怎么拆分/合并? 3款 PDF 拆分和合并工具分享

    以PDF格式传输文档已广泛使用很长时间,也是传输文档的最常见方式之一.但是,当涉及到从众多PDF文件中提取特定页面并将它们放在一起以制作新的PDF文档时,我们将需要专用软件来合并和拆分多个PDF. 现 ...

  4. java 手机号脱敏,身份证号脱敏 工具类

    java 手机号脱敏,身份证号脱敏 工具类 import org.apache.commons.lang3.StringUtils;/*** * @title: 脱敏工具类* @author: wll ...

  5. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

  6. Java - HuTool 使用 EscapeUtil、XmlUtil等工具类(四)

    Java - HuTool 使用 EscapeUtil.XmlUtil等工具类(四) 本篇主要介绍 HuTool工具, 其是 java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我 ...

  7. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  8. 记录一下:Java 汉字获取拼音或首字母工具类

    记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...

  9. Java教程:微信排序并加密工具类

    Java教程:微信排序并加密工具类 源码: import cn.bsit.commons.md5.MD5Utils;import java.util.Arrays; import java.util. ...

最新文章

  1. 由MessageBox和AfxMessageBox的使用异同所感
  2. OkHttpClient源码分析(五)—— ConnectInterceptor和CallServerInterceptor
  3. oracle 方言报错,ORACLE11g:No Dialect mapping for JDBC type: -9解决方案详解
  4. POJ1328-Radar Installation
  5. mysql 金额 类型,SQL实现根据类型对金额进行归类
  6. Python-快速排序算法
  7. 大牛书单 | 数据库专题好书分享
  8. 《现代操作系统》精读与思考笔记 第七章 多媒体
  9. c语言二进制数怎么表示_搞懂这些公式和原理,二级C语言对你来说肯定会简单很多!...
  10. get和post的联系与区别
  11. Qt5制作icon图标文件和发布程序简易介绍
  12. python百度人脸识别_python 与 百度人脸识别api
  13. 基于深度学习的青菜病害区域图像语义分割与定位
  14. Qt加载RGB内存数据,并显示彩色图
  15. 学习bcgcontrol1
  16. Windows NT/2k/XP/Vista 管理员密码重置
  17. Jmeter---Jmeter安装教程
  18. php input type='button' 颜色,HTML5 input新增type属性color颜色拾取器的实例代码
  19. Unity3D世界坐标和局部坐标的关系,之间转换浅谈
  20. 草木有本心,何求美人折

热门文章

  1. 两台虚拟机的Putty端实现互相免密码登录
  2. 二、Java面向对象(7)_封装思想——this关键字
  3. 深入理解CSS线性渐变linear-gradient
  4. Python的StringIO模块和cStringIO模块
  5. 最土团购系统数据结构数据字典二次开发宝典
  6. Windows Phone 8初学者开发—第17部分:Coding4Fun工具包简介
  7. 关于android相机开发中遇到的内存溢出的问题
  8. python 对象类型有哪些?
  9. 通过注册表修改默认浏览器设置
  10. elastic ik分词搜索_php环境下使用elasticSearch+ik分词器进行全文搜索