利用java代码将一个pdf文件切割为1M以内大小的多份文件
最近测试了下java的OCR相关jar包。详情请看MAC系统中的JAVA中使用tess4j-4.4.1实现OCR识别的环境搭建(含tesseract安装配置)。
发现测试效果不是太好,所以利用三方软件做处理10几兆的文件。但是对上传文件的大小有限制,不能超过1M。按照每个文件X页去分隔有的大有的小。且数量会多。所以利用java的pdf相关jar,平均分隔下pdf文件。数量下降了一半,更加节省了时间。
先引入jar包
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
<scope>test</scope>
</dependency>
代码示例如下
package com.chl.base.tools;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
public class PdfSplit {
private static String pdfPath = "/Users/chenhailong/Desktop/hello.pdf";
public static void main(String[] args) {
String temp_url = "/Users/chenhailong/Desktop/";
PdfCopy copy = null;
int pageSize = 1;
long count = 0;
try {
PdfReader pr = new PdfReader(pdfPath);
int pages = pr.getNumberOfPages();
//文档纸张设置
Document document = new Document(pr.getPageSize(1));
//创建初始文档
String url = temp_url + "new_" + pageSize +".pdf";
copy = new PdfCopy(document,new FileOutputStream(url));
for(int i = 1;i<= pages;i++) {
document.open();
PdfImportedPage page = copy.getImportedPage(pr, i);
copy.addPage(page);
count = copy.getCurrentDocumentSize();
if(count > 1 * 0.9 * 1024 * 1024) { //阈值 为 0.9
document.close();
++pageSize;
url = temp_url + "new_" + pageSize +".pdf";
document = new Document(pr.getPageSize(1));
copy = new PdfCopy(document,new FileOutputStream(url));
}
}
document.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// String dir = System.getProperty("user.dir");
// System.out.println(dir);
}
}
注意判断大小的逻辑,要计算初始化文件时的大小值。我这里处理始终占用500k左右的大小。
原创文章,转载请标明本文链接: 利用java代码将一个pdf文件切割为1M以内大小的多份文件