java pdf与ofd文件相互转换

借用spire.pdf进行pdf与ofd相互转化
spire.pdf for java 参考文档: https://www.e-iceblue.cn/spire-pdf-for-java-news.html

  • 依赖:
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf.free</artifactId>
    <version>8.5.8</version>
</dependency>
  • pdf与ofd相互转化
    //ofd文件Content-Type内容
    public static final String fileType = "octet-stream";

    public static final String ofdType = "ofd";

    /**
     * @return
     * @Author xiangyong.zeng
     * @Description 转化ofd文件,为pdf文件,返回文件路径
     * @Date 18:05 2022/11/29
     * @Param
     **/
    public static String transOfdToPdf(String path) {
        if (StringUtils.isBlank(path)) {
            return null;
        }
        String pdfPath = null;
        if (path.toLowerCase().contains(fileType)) {
            pdfPath = path.toLowerCase().replace(fileType, "pdf");
        } else if (path.toLowerCase().contains("ofd")) {
            pdfPath = path.toLowerCase().replace("ofd", "pdf");
        }

        OfdConverter ofdConverter = new OfdConverter(path);

        ofdConverter.toPdf(pdfPath);

        return pdfPath;
    }

    /**
     * @return
     * @Author xiangyong.zeng
     * @Description ofd转pdf
     * @Date 17:10 2022/11/24
     * @Param
     **/
    public static byte[] transOfdToPdf(byte[] ofdBytes) {
        if (ofdBytes == null || ofdBytes.length <= 0) {
            logger.error("ofdBytes内容为空,或者内容错误,不允许进行pdf转化");
            return null;
        }

        String tempFolder = UUID.randomUUID().toString();
        String rootPath = System.getProperty("user.dir");
        String path = rootPath + "/" + "tempFolder/" + tempFolder + "/";
        //将ofd数组输出为ofd文件
        String ofdName = UUID.randomUUID() + ".ofd";
        FileUtil.fileToBytes(ofdBytes, path, ofdName);

        //读取ofd文件输出为pdf文件
        String pdfName = UUID.randomUUID() + ".pdf";
        OfdConverter ofdConverter = new OfdConverter(path + ofdName);
        ofdConverter.toPdf(path + pdfName);

        //读取pdf文件为数组
        File file = new File(path + pdfName);
        byte[] bytes = new byte[0];
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(file);
            bytes = FileUtil.input2byte(inputStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //删掉临时目录夹
        try {
            File parentFile = file.getParentFile();
            File[] files = parentFile.listFiles();
            Arrays.stream(files).forEach(item -> item.delete());
            parentFile.delete();
        } catch (Exception e) {

        }
        return bytes;
    }

    /**
     * @return
     * @Author xiangyong.zeng
     * @Description PDF数组转化OFD数组
     * @Date 11:39 2022/8/8
     * @Param
     **/
    public static byte[] transPdfToOfd(byte[] pdfBytes) {
        if (pdfBytes == null || pdfBytes.length <= 0) {
            logger.error("pdfBytes内容为空,或者内容错误,不允许进行ofd转化");
            return null;
        }

        long startTime = LocalDateTime.now().atOffset(ZoneOffset.of("+8")).toInstant().toEpochMilli();

        byte[] bytes;
        try {
            //构建PDF内容
            PdfDocument pdf = new PdfDocument();
            pdf.loadFromBytes(pdfBytes);
            //定义输出流
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            //PDF转存OFD
            pdf.saveToStream(outputStream, FileFormat.OFD);

            bytes = outputStream.toByteArray();
            logger.info("PDF转OFD格式成功,转化长度:{}", bytes.length);
        } catch (Throwable e) {
            logger.error("PDF转化OFD格式失败,失败原因:{}", e.getMessage());
            throw new RuntimeException("DF转化OFD格式失败");
        }

        long endTime = LocalDateTime.now().atOffset(ZoneOffset.of("+8")).toInstant().toEpochMilli();
        logger.info("pdf转化为ofd耗时:{} /毫秒", endTime - startTime);

        return bytes;
    }

    /**
     * @return
     * @Author xiangyong.zeng
     * @Description pdf byte数组转ofd文档输出
     * @Date 14:49 2022/8/8
     * @Param ofdPath ofd文档输出全路径
     **/
    public static void transPdfToOfd(byte[] pdfBytes, String ofdPath) {
        if (pdfBytes == null || pdfBytes.length <= 0) {
            logger.error("当前待转化的pdf文件错误,或者内容为空");
            throw new RuntimeException("pdf转ofd转化失败,pdf文件错误,pdf文件内容不能为空");
        }

        if (StringUtils.isBlank(ofdPath)) {
            logger.error("ofd文档输出地址不能为空");
            throw new RuntimeException("ofd文档输出地址不能为空");
        }

        long startTime = LocalDateTime.now().atOffset(ZoneOffset.of("+8")).toInstant().toEpochMilli();
        //构建PDF内容
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromBytes(pdfBytes);

        pdf.saveToFile(ofdPath, FileFormat.OFD);

        long endTime = LocalDateTime.now().atOffset(ZoneOffset.of("+8")).toInstant().toEpochMilli();
        logger.info("pdf转化为ofd耗时:{} /毫秒", endTime - startTime);
    }

    /**
     * @return
     * @Author xiangyong.zeng
     * @Description pdf 转 ofd文档
     * @Date 14:51 2022/8/8
     * @Param pdfPath pdf文件全路径
     * @Param ofdPath ofd 输出全路径
     **/
    public static void transPdfToOfd(String pdfPath, String ofdPath) {
        if (StringUtils.isBlank(ofdPath) || StringUtils.isBlank(pdfPath)) {
            logger.error("pdf,ofd文档地址不能为空!请检查入参地址");
            throw new RuntimeException("pdf,ofd文档地址不能为空!请检查入参地址");
        }

        byte[] bytes = FileUtil.getBytesFromFile(new File(pdfPath));
        transPdfToOfd(bytes, ofdPath);
    }

    public static void main(String[] args) {
        transPdfToOfd("C:\\Users\\DELL\\Desktop\\JGRDXZS.pdf", "C:\\Users\\DELL\\Desktop\\JGRDXZS.ofd");
    }
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值