前言
公司原有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("未获取到文件");
}
}
}
直接引入该方法调用就可以了。