【java采用aspose-words实现rtf转pdf】

前言

公司原有c#语言实现的功能,现用java重构。但是其中涉及到一块rtf文件转pdf功能的实现。
但是网上对于这块的实现很少,最后发现aspose-words同时也是支持java语言的。

jar包引入

因为该jar包通过mvnrepository无法引入,故采用本地jar引入的方式。
jar包大家自行搜索,网上很多。

<dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>20.12</version>
            <scope>system</scope>
            <systemPath>${basedir}/src/main/resources/lib/aspose-words-20.12-jdk17-crack.jar</systemPath>
</dependency>

工具类实现

@Component
public class RtfToPdfUtils {

	// 替换成自己配置文件里的上传地址
    @Value("${nas.rtfUploadPath}") 
    private String rtfUploadPath;

	// 替换成自己配置文件里的下载地址
    @Value("${nas.rtfDownloadPath}")
    private String rtfDownloadPath;

    /**
     * rtf转pdf
     *
     * @param result 文件流
     * @param orgId  租户Id(区分不同的租户/公司/医院)
     * @param pdfId  文件名
     * @param prefix 后缀
     * @return
     * @throws Exception
     */
    public String rtfToPdf(String result, String orgId, String pdfId, String prefix) throws Exception {
        if (StringUtils.isEmpty(prefix)) {
            prefix = "file";
        }
        if (StringUtils.isNotEmpty(result)) {
            InputStream inputStream = new ByteArrayInputStream(result.getBytes());
            Document pdfDocument = new Document(inputStream);
            String fileName = pdfId + ".pdf";
            String pathUrl = rtfUploadPath + prefix + "/" + orgId;
            File file = new File(pathUrl);
            if (!file.exists()) {
                file.mkdirs();
            }
            pdfDocument.save(pathUrl + "/" + fileName, SaveFormat.PDF);
            return rtfDownloadPath + prefix + "/" + orgId + "/" + fileName;
        } else {
            throw new ServiceException("未获取到文件");
        }
    }

    /**
     * rtf转pdf直接返回文件流
     *
     * @param result
     * @param pdfId
     * @param response
     * @throws Exception
     */
    public void rtfToPdfReturnStream(String result, String pdfId, HttpServletResponse response) throws Exception {
        if (StringUtils.isNotEmpty(result)) {
            InputStream inputStream = new ByteArrayInputStream(result.getBytes());
            Document pdfDocument = new Document(inputStream);
            String fileName = pdfId + ".pdf";
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

            // 将文档保存为 PDF 并写入响应输出流
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            pdfDocument.save(byteArrayOutputStream, SaveFormat.PDF);
            byte[] pdfBytes = byteArrayOutputStream.toByteArray();

            // 将 PDF 字节数组写入响应输出流
            response.getOutputStream().write(pdfBytes);
            response.getOutputStream().flush();
            response.getOutputStream().close();
        } else {
            throw new ServiceException("未获取到文件");
        }
    }
}

直接引入该方法调用就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值