借用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");
}