利用java代码将一个pdf文件切割为1M以内大小的多份文件

作者: admin 分类: IO 发布时间: 2019-10-23 17:03  阅读: 61 views

最近测试了下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以内大小的多份文件

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读