java 用PDFBox 删除 PDF文件中的某一页
依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-app</artifactId>
<version>1.8.10</version>
</dependency>
java 用PDFBox 删除 PDF文件中的某一页,前n页,后n页,效率低,不推荐使用
package com.everjiankang; import java.io.File; import org.apache.pdfbox.pdmodel.PDDocument; /**运行效率很慢,因为每次删除一页就读取和保存一次文件,初始文件名格式:xxxx0.pdf*/
public class Test {
static String name_pre = "C:\\log\\jvm"; //文件名前缀
static String name_after = ".pdf";//文件名后缀
public static void main(String[] args) {
//1.刪除前n頁
// cutPdfPreNPage(2);
//2.刪除后n頁
cutPdfAfterNPage(5);
//3.刪除第n頁
cutPdf(name_pre + 0 + name_after,name_pre + (0+1) + name_after,7);//删除第n页
} /**
* 删除前n页
* @param n
*/
public static void cutPdfPreNPage(int n) {
for(int i = 0; i < n; i++)
cutPdf(name_pre + i + name_after,name_pre + (i+1) + name_after,0);
} /**
* 删除后n页
* @param n
*/
public static void cutPdfAfterNPage(int n) {
for(int i = 0; i < n; i++)
cutPdf(name_pre + i + name_after,name_pre + (i+1) + name_after,1);
} /**
*
* @param pdfPath 旧路径
* @param newPdfPath 新路径
* @param flag 0:第一页;1:最后一页 ;else : 要删除的页码
*/
public static void cutPdf(String pdfPath,String newPdfPath, int flag)
{
File file = new File(pdfPath);
PDDocument document = new PDDocument();
try{
document = PDDocument.load(file);
}catch(Exception e){
e.printStackTrace();
}
int noOfPages = document.getNumberOfPages();
System.out.println(noOfPages);
if(flag == 0)
document.removePage(0);
else if(flag == 1) {
document.removePage(noOfPages-1);
} else {
document.removePage(flag-1);
}
try{
document.save(newPdfPath);
document.close();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("已经转完了哦"); }
}
抽取任意范围的PDF页作为新的PDF. 效率高
依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
代码
/**
* 截取pdfFile的第from页至第end页,组成一个新的文件名
* @param pdfFile 需要分割的PDF
* @param savepath 新PDF
* @param from 起始页
* @param end 结束页
*/
public static void splitPDFFile(String respdfFile,
String savepath, int from, int end) {
Document document = null;
PdfCopy copy = null;
try {
PdfReader reader = new PdfReader(respdfFile);
int n = reader.getNumberOfPages();
if(end==0){
end = n;
}
ArrayList<String> savepaths = new ArrayList<String>();
String staticpath = respdfFile.substring(0, respdfFile.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 (IOException e) {
e.printStackTrace();
} catch(DocumentException e) {
e.printStackTrace();
}
}
java 用PDFBox 删除 PDF文件中的某一页的更多相关文章
- Java 使用PDFBox提取PDF文件中的图片
今天做PDF文件解析,遇到一个需求:提取文件中的图片并保存.使用的是流行的apache开源jar包pdfbox, 但还是遇到坑了,比如pdfbox版本太高或太低都不能用!!这个包竟然没有很好地做好兼容 ...
- 怎样批量删除PDF文件中的注释
日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释? 操作教程: ...
- java 库 pdfbox 将 pdf 文件转换成高清图片方法
近期需要将 pdf 文件转成高清图片,使用库是 pdfbox.fontbox.可以使用 renderImageWithDPI 方法指定转换的清晰度,当然清晰度越高,转换需要的时间越长,转换出来的图片越 ...
- java操作Excel、PDF文件
java操作Excel.PDF文件 分享者:Vashon 分享来源:CSDN博客 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的 ...
- 怎样把PDF文件中的一页提取出来
现在随着网络科技的发展在网上找资源找文件就像家常便饭一样,但是有很多文件下载完成之后只有几页是需要的这时候就很困惑了,这么多怎么才能看完啊.这样为了不浪费时间可以将有用的一页提取出来,进行使用,那怎样 ...
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- 删除XML文件中的空格
应要求需要删除xml文件中的空格,制表符等字符.要求双引号和xml的text属性中包含的空格不删除. bool delSpace(QFile &file, QString path) //删除 ...
- 从pdf 文件中抽取特定的页面
前段时间买了一个kindle 电子书阅读器.我想用它来读的pdf文档.当然最主要是用来读python标准库&mysql的官方文档. 问题就来了.这两个都是大头书.之前用mac看还好.用kind ...
- Java笔记13:统计文件中每个字符出现的次数
一.代码实现 import java.io.*; import java.util.*; /** 功能:统计文件中每个字符出现的次数 思路: 1.定义字符读取(缓冲)流 2.循环读取文件里的字符,用一 ...
随机推荐
- 「洛谷2495」「BZOJ3052」「SDOI2001」消耗战【虚树+树形动态规划】
题目大意 给你\(k\)个点,让这一些点和一号节点断开,删去某一些边,求最小的删去边权之和. 做题的心路历程 做了\(HG\)昨天的模拟赛,深深感觉到了窝的菜,所以为了\(A\)掉T1这一道毒瘤,窝就 ...
- 添加 [DataContract] 到 Entity Framework 6.0 POCO Template
1. 添加using System.Runtime.Serialization; 找到这行 includeCollections ? (Environment.NewLine + "usin ...
- our happy ending(状压dp)
题意:给定一个n,k,l. 问有多少长度为n的序列满足选出一些数使得他们相加为k,数列中每个数都在1-l以内. Solution 正解还是很妙的. 状压dp,设dp[i][j]表示长度为i的序列,能表 ...
- 源码分析-AutoCloseable
AutoCloseable 该接口用于try-with-resources语法糖提供支持,用于自动关闭资源作用 类型:接口 方法:close(); 详解: close():用于自动关闭资源的时候需要进 ...
- JavaScript面向对象--记录防忘记(一)
1.理解对象: 创建自定义对象最简单的方式就是创建一个object实例,再给他添加属性和方法. let person = new Object(); person.name = 'zhangsan'; ...
- 洛谷P1712 区间
题意:给你n个区间,从中选择m个,使得它们有交,且最长与最短区间的差值最小. 解:这道题我想了好多的,nlog²n错的,nlogn错的,最后终于想出nlogn的了...... 把区间按照长度排序,然后 ...
- smartProgram学习笔记
背景:转正前要完成这样一个编程课的学习.平时写代码只是完成基本的功能,没有养成良好的习惯,感觉这样的课程还是要好好学习下,要不真是不知道什么叫写代码. Week1 为什么要写好代码? 因为平时读:写代 ...
- java ssl 使用不同的加密套件,对性能影响很大
一直以来都是使用java默认的[加密套件]来处理ssl请求,突然有一天我尝试显式的设置了一组加密套件后,发现图片显示的速度明显快了一倍左右. 经过使用几组不同的加密套件测试后,发现使用 TLS_ECD ...
- 第二篇:用Android Studio编写Hello World
将Android Studio的环境搭建好后,第一个写Hello World测试程序.Android Studio v3.2.1. 一.新建工程 点击Start a new Android Studi ...
- Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public xxxxxxxx.
最近在使用 springBoot开发的时候, 使用PostMan访问接口, 返回一个 404 , 后台报一个 warn : Failed to read HTTP message: org.spr ...