Java 将PDF转图片上传到FTP上

首先创建一个 Java 工程,把下载好的 pdfbox-2.0.2.jar 作为类库加入工程

   //pdf转图片上传到ftp上
    public String pdfImage(String pdfUrl,String title){
        StringBuffer imageUrls = new StringBuffer();
        try {
            InputStream responseBodyAsStream = null;
            org.apache.commons.httpclient.HttpClient client=new org.apache.commons.httpclient.HttpClient();
            GetMethod getMethod=new GetMethod(pdfUrl);
            int executeMethod = client.executeMethod(getMethod);
            if(executeMethod==200){
                responseBodyAsStream = getMethod.getResponseBodyAsStream();
            }
            PDDocument doc = PDDocument.load(responseBodyAsStream);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = 0; i < pageCount; i++) {
                //将PDF生成图片流
                BufferedImage image = renderer.renderImageWithDPI(i, 90);
                ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
                ImageIO.write(image, "PNG", outputStream);
                //将图片流上传到ftp,ftpDir目录
                String dir = ftpDir + "/invoice/img/";
                String filename = title+"_"+i+".jpg";
                InputStream is = new  ByteArrayInputStream(outputStream.toByteArray());
                boolean bln = ftp.upload(is, dir, filename);
                if(bln){

                   //ftpViewUrl 预览/下载地址
                    imageUrls.append(ftpViewUrl + dir + filename).append(";");
                }
            }
            return imageUrls.toString();
        } catch (Exception e) {
            log.debug(e);
            return null;
        }
    }

private static FTPClientConfigure config;

    // 连接池
    final GenericKeyedObjectPool<FTPClientConfigure, FTPClient> pool = new FTPClientPool(new FTPClientFactory(), new FTPPoolConfig());
 

/**
     * 获取. <br/>
     * @return
     */
    private FTPClient get() {
        try {
            if (null == config)
                config = new FTPClientConfigure(host, port, username, password);
            return pool.borrowObject(config);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

/**
     * 归还. <br/>
     * @param obj
     */
    private void returnObject(FTPClient obj) {
        pool.returnObject(config, obj);
    }

   //ftp上传

    public boolean upload(InputStream fis, String dir, String fileName) {
        boolean result = false;
        FTPClient client = get();
        if (null == client)
            return result;
        try {
            // 切换至跟目录
            client.changeWorkingDirectory("/");
            // 设置上传目录
            if (StringUtils.isNotBlank(dir)) {
                // 防止中文目录乱码
                dir = new String(dir.getBytes(LOCAL_CHARSET), SERVER_CHARSET);
                // 切换目录
                if (!client.changeWorkingDirectory(dir)) {
                    // 切换失败,创建目录
                    String[] dirs = dir.replaceAll("\\\\", "/").replaceAll("//", "/").split("/");
                    for (String d : dirs) {
                        if (StringUtils.isBlank(d))
                            continue;
                        if (!client.changeWorkingDirectory(d)) {
                            if (client.makeDirectory(d)) {
                                if (!client.changeWorkingDirectory(d)) {
                                    log.error("切换目录失败!");
                                    return result;
                                }
                            } else {
                                log.error("创建目录失败!");
                                return result;
                            }
                        }
                    }
                }
            }
            fileName = new String(fileName.getBytes(LOCAL_CHARSET), SERVER_CHARSET);
            result = client.storeFile(fileName, fis);
        } catch (IOException e) {
            log.error(e);
            throw new RuntimeException("FTP客户端出错!", e);
        } finally {
            IOUtils.closeQuietly(fis);
            returnObject(client);
        }
        return result;
    }

转载于:https://my.oschina.net/lisc2016/blog/1610836

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值