合并多张图片为pdf

/***
     * 利用itext把多张图片组合为pdf
     * @Param  pdfFilePath  生成的pdf保存路径
     * @Param  imgFilePath  图片路基list
     */
    public  void createPdf(String pdfFilePath, String... imgFilePath) throws IOException {
        // 创建pdf文件
        Document document = new Document(PageSize.A4, 0, 0, 0, 0);
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(pdfFilePath);
            PdfWriter.getInstance(document, fos);

            // 打开文档
            document.open();

            float contentWidth = document.getPageSize().width();
            float contentHeight = document.getPageSize().height();
            float freeHeight = contentHeight;

            for (String imgPath : imgFilePath) {
                logger.debug(imgPath);
                Image image = Image.getInstance(imgPath);
                image.setAlignment(Image.ALIGN_CENTER);

                float height = image.height();
                float width = image.width();

                // 优先缩根据宽去缩放
                float scale = 1.0f;
                if (width > contentWidth) {
                    scale = contentWidth / width;
                    width = scale * width;
                    height = scale * height;
                }

                if (height > contentHeight) {
                    float s2 = contentHeight / height;
                    width = s2 * width;
                    height = s2 * height;
                    scale = scale * s2;
                }

                if (scale != 1.0) {
                    image.scalePercent(scale * 100);
                }

                // 剩余空间能放下
                if (freeHeight >= height) {
                    document.add(image);
                    freeHeight = freeHeight - height;
                } else {
                    document.newPage();
                    document.add(image);
                    freeHeight = contentHeight - height;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (document.isOpen()) {
                document.close();
            }
            if (fos != null) {
                fos.flush();
                fos.close();
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值