多张图片转换PDF

引入包

            <!-- PDFBox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.24</version>
        </dependency>

        <!-- iText -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext7-core</artifactId>
            <version>7.1.15</version>
            <type>pom</type>
        </dependency>
// 参数是文件路径 C:\Users\86158\Desktop\常用工具图标\1\2\3\4
public void imagesToPdf(String pdfFolderPath) {
        if (StringUtils.isEmpty(pdfFolderPath)) {
            return;
        }
        try {
            // pdf文件名称前缀 可以根据自己要求自定义
            List<String> pdfNameList = Arrays.asList(pdfFolderPath.split("\\\\"));            
            String pdfPrefixName = pdfNameList.get(pdfNameList.size() -4)+"-"+pdfNameList.get(pdfNameList.size() -3)
                    +"-"+pdfNameList.get(pdfNameList.size() -2)+"-"+pdfNameList.get(pdfNameList.size() -1);

            // 获取所有文件名称
            File[] files = new File(pdfFolderPath).listFiles();

            // 遍历文件
            for (File file : files) {
                // pdf文件存储路径
                String pdfPath = pdfFolderPath + "\\" + file.getName()+"\\"+ pdfPrefixName+"-"+file.getName() + ".pdf";

                // 获取文件夹中的所有图片
                List<File> imageFiles = getImageFiles(pdfFolderPath + "\\" + file.getName());
                // 创建PDF文档
                PDDocument document = new PDDocument();
                imageFiles.forEach(imageFile -> {
                    PDPage page = new PDPage(PDRectangle.A4);
                    document.addPage(page);
                    // 写入内容
                    PDImageXObject pdImage = null;
                    try {
                    // 第一个参数是,照片的原始路径
                        pdImage = PDImageXObject.createFromFile(pdfFolderPath + "\\" +file.getName()+"\\"+ imageFile.getName(), document);
                        try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
                            contentStream.drawImage(pdImage, 0, 0, page.getMediaBox().getWidth(), page.getMediaBox().getHeight());
                        }
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                });
                document.save(pdfPath);
                document.close();
            }


        } catch (Exception e) {
            e.printStackTrace();
        }


    }




    /**
     * 获取文件夹中的所有图片文件
     * 参数是照片所在文件夹路径
     * @return
     */
    private List<File> getImageFiles(String imageFolderPath) {

        File folder = new File(imageFolderPath);
        List<File> imageFiles = new ArrayList<>();

        // 定义图片文件的后缀名
        String[] imageExtensions = new String[]{"jpg"};

        // 创建一个文件名过滤器
        FilenameFilter imageFilter = (dir, name) -> {
            for (String extension : imageExtensions) {
                if (name.toLowerCase().endsWith("." + extension)) {
                    return true;
                }
            }
            return false;
        };

        // 获取文件夹中的所有文件
        File[] files = folder.listFiles(imageFilter);

        // 如果文件不为空,则添加到列表中
        if (files != null) {
            Collections.addAll(imageFiles, files);
        }

        return imageFiles;
    }






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值