中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java實現PDF切割、截取、合并工具類、轉圖片

發布時間:2021-06-24 11:48:50 來源:億速云 閱讀:448 作者:chen 欄目:大數據

本篇內容介紹了“Java實現PDF切割、截取、合并工具類、轉圖片”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

依賴導入
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>
		<dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.15</version>
        </dependency>
		<dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>2.0.15</version>
        </dependency>
工具代碼
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<String> savepaths = new ArrayList<String>();
            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<String> pdfToImagePath(String filePath){
        List<String> 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<pageCount; 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<BufferedImage> piclist = new ArrayList<BufferedImage>();
            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<BufferedImage> 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<int[]> imgRGB = new ArrayList<int[]>(); // 保存所有的圖片的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切割、截取、合并工具類、轉圖片”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梁河县| 合山市| 孝感市| 赞皇县| 景谷| 广安市| 长丰县| 麦盖提县| 壤塘县| 揭阳市| 绥芬河市| 金秀| 双城市| 驻马店市| 奈曼旗| 郑州市| 海晏县| 灵寿县| 锡林浩特市| 定襄县| 汾阳市| 大洼县| 集安市| 舒城县| 大安市| 许昌市| 文水县| 邢台县| 琼中| 若尔盖县| 琼海市| 福州市| 阿克陶县| 凭祥市| 奈曼旗| 张家口市| 普兰店市| 呼图壁县| 黄山市| 吉木萨尔县| 怀集县|