首页 > 编程语言 >java OSS存储文件 ofd文件格式转pdf

java OSS存储文件 ofd文件格式转pdf

时间:2023-03-15 09:00:41浏览次数:52  
标签:文件 outputStream java ofdrw ofd 文件格式 pdf addSimilarFontReplaceRegexMapping

java ofd文件转pdf

之前有博客写了ofd与pdf文件进行相互转化, 【pdf与ofd相互转化 】,但是spire-pdf的jar包进行ofd转为pdf时,如果是双层ofd文件,最后转化的结果会丢失上层内容。因此可以使用spire.free.pdf进行pdf转化为ofd,使用ofdr进行ofd转为pdf。

ofd转为pdf
ofdrw-full git 官方文档 ofdrw-full能完整转化spire转化不了的双层ofd文件。
引入依赖:

<dependency>
<groupId>org.ofdrw</groupId>
<artifactId>ofdrw-full</artifactId>
<version>1.20.2</version>
</dependency>

如果出现报错,log4j-slf4j-impl依赖与spring-boot引用的log4j依赖有冲出,直接排除引用即可

<dependency>
<groupId>org.ofdrw</groupId>
<artifactId>ofdrw-full</artifactId>
<version>1.20.2</version>
<exclusions>
<exclusion>
<artifactId>log4j-slf4j-impl</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
</exclusions>
</dependency>


@Override
public void onlinePreviewOFD(String fileName, HttpServletResponse response) {
if(StrUtil.isBlank(fileName)){
return ;
}
OutputStream outputStream = null;

QueryWrapper<SysFile> sysFileQueryWrapper = new QueryWrapper<>();
sysFileQueryWrapper.lambda().eq(SysFile::getFileName,fileName);
sysFileQueryWrapper.last(" limit 1 ");
SysFile sysFile = this.getOne(sysFileQueryWrapper);
if(ObjectUtil.isNotEmpty(sysFile)){
// 为不规范的字体名创建映射
FontLoader.getInstance()
.addAliasMapping("小标宋体", "方正小标宋简体")
.addAliasMapping("KaiTi_GB2312", "楷体")
.addAliasMapping("楷体", "KaiTi")

.addSimilarFontReplaceRegexMapping(".*Kai.*", "楷体")
.addSimilarFontReplaceRegexMapping(".*Kai.*", "楷体")
.addSimilarFontReplaceRegexMapping(".*MinionPro.*", "SimSun")
.addSimilarFontReplaceRegexMapping(".*SimSun.*", "SimSun")
.addSimilarFontReplaceRegexMapping(".*Song.*", "宋体")
.addSimilarFontReplaceRegexMapping(".*MinionPro.*", "SimSun");

FontLoader.getInstance().scanFontDir(new File("src/main/resources/fonts"));
FontLoader.setSimilarFontReplace(true);



//oss文件夹
String bucketName = sysFile.getBucketName();
//本身文件名
String original = sysFile.getOriginal();
//oss文件文件名
String ossFileName = sysFile.getOssFileName();
//type
String type = sysFile.getType();


// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

try {
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
OSSObject ossObject = ossClient.getObject(bucketName, ossFileName);

if (StrUtil.equals("ofd",type)) {
try {
// 1. 文件输入路径
InputStream objectContent = ossObject.getObjectContent();
              // 2. 转换后文件输出位置
                        outputStream = response.getOutputStream();


// 3. OFD转换PDF
ConvertHelper.toPdf(objectContent, outputStream);
// int read = 0;
// while ((read = input.read(buffBytes)) != -1) {
// outputStream.write(buffBytes, 0, read);
// }
outputStream.flush();


// System.out.println("生成文档位置: " + dst.toAbsolutePath());
} catch (GeneralConvertException e) {
// GeneralConvertException 类型错误表明转换过程中发生异常
e.printStackTrace();
}
}



} catch (Exception e) {
try {
if (outputStream != null) {
outputStream.close();
}
// if (input != null) {
// input.close();
// }
} catch (IOException e2) {
e2.printStackTrace();
}
log.error("文件读取异常", e);
} finally {
// 关闭OSSClient。
if (ossClient != null) {
ossClient.shutdown();
}
}
}



}

可以参考该项目https://gitee.com/ofdrw/ofdrw

标签:文件,outputStream,java,ofdrw,ofd,文件格式,pdf,addSimilarFontReplaceRegexMapping
From: https://www.cnblogs.com/wjsqqj/p/17217207.html

相关文章

  • Java中的基本数据类型和引用数据类型
    一、基本数据类型:byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0short:短整型,在内存中占16位,即2个字节,取值范围-32768~32767,默认值0int:整......
  • JavaWeb-QQZone项目的业务需求、数据库设计等内容
    资料来源于:B站尚硅谷JavaWeb教程(全新技术栈,全程实战),本人才疏学浅,记录笔记以供日后回顾由于是多个视频内容混合在一起,因此只放了第一个链接本文参考价值不高,自我记录......
  • Java蓝桥杯
    1、特殊回文数:123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。publicclassMa......
  • 微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发
    一、前言大家好,我是六哥!又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的。其实不是我不积极,而是相对更文学习来说,优先级不是最高。......
  • # 909 -「java」一维数组展开+ BFS解决 -蛇梯棋- 最短步进次数 的详细思路
    Tags:中等数组BFSjava 题目链接:909.蛇梯棋 注意事项[题目中的坑]:【"S形"的概念】:题目开头举例的N*N的数组,其内标示的1~N²数字,指代的是......
  • # 92 -「java 」 100-执行速度 - 三步『截取子链表- 递归反转- 拼接』 解题的实现思路
    Tags中等递归链表java 题目链接:92.反转链表II 解题思路[截取子链表+反转+拼接]:以1->2->3->4->5,m=2,n=4为例:【截取】定位到需要反......
  • Java Mybatis 笔记
    MyBatis1、简介1.1什么是MybatisMyBatis是一款优秀的持久层框架;它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获......
  • CFR 反编译 Java 枚举
    CFR到这里下载。运行如下命令使用当前文件夹下的cfr-0.152.jar反编译当前文件夹下的T.class。java-jarcfr-0.152.jarT.class--sugarenumsfalse其中--sugarenum......
  • Java的HashMap
    基于hash值的K-V结构数据容器。重要计算方法计算key的hash值(key==null)?0:(h=key.hashCode())^(h>>>16)利用hash计算tab中的位置p=tab[i=(n-1)&......
  • java变量和常量
    一标识符我们所认识的标识符如:类名HelloWorld标识符的命名规则标识符可以由字母,数字,下划线和和美元符$组成,不能以数字开头标识符严格区分大小写标识符......