java中各种文件的相互转化
java中各种文件的相互转化
前几天一直在进行rtf文件流转化为HTML,折腾了好久,文件的格式转化都无法成功。后来找到了一个新的包(aspose),总算解了我的燃眉之急。现在记录分享一下。
1.使用aspose.words将doc,docx,txt,rtf等转化为HTML
Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务。Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式。使用Aspose.Words可以在不使用Microsoft.Word的情况下生成、修改、转换和打印文档。在项目中使用Aspose.Words可以有以下好处。
其丰富的功能特性主要有以下4个方面:
1)格式转换。Aspose.Words具有高质量的文件格式转换功能,可以和Doc,OOXL,RTF,TXT等格式互相转换。
2)文档对象模型。通过丰富的API以编程方式访问所有的文档元素和格式,允许创建,修改,提取,复制,分割,加入,和替换文件内容。
3)文件渲染。可以在服务器端转换整个文档或者页面为PDF,XPS,SWF格式,同样可以转换文档页面为图像格式,或者 .NET Graphics对象,这些功能和Microsoft.Word是一样的。
4)报表。可以从对象或者数据源填充模版生成文件。
Aspose.Words可以在没有安装Microsoft Office的机器上工作。所有的Aspose组件都是独立,不需要微软公司的授权。总之, Aspose.Words在安全性、稳定性、可扩展性、速度、价格和自动化功能方面,是一个很不错的选择。
Aspose包的基本介绍到此结束,详细的介绍请参考:http://www.cnblogs.com/asxinyu/p/3242754.html
我这里就不多做赘述了。java中具体使用如下:首先添加依赖,注明仓库地址:
<repositories><repository><id>AsposeJavaAPI</id><name>Aspose Java API</name><url>https://repository.aspose.com/repo/</url></repository>
</repositories>
<dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>18.6</version><classifier>jdk16</classifier>
</dependency>
下面在代码中就可以直接使用了,使用时,他会有水印,注明包的出处,如果不想要,可以直接替换掉水印的HTML代码。下面我只是使用doc转化为HTML。简单方便。
// AnnouncementDO announcement = announcementDao.getFirst();
// ByteArrayInputStream bais = new ByteArrayInputStream(announcement.getAnnouncement());File file=new File("C:/Users/Desktop/1111.doc");FileInputStream bais=new FileInputStream(file);Document doc = new Document(bais);result = doc.toString(SaveFormat.HTML);//替换掉水印result = result.replace("<p style=\"margin-top:0pt; margin-bottom:0pt; text-align:justify; widows:0; orphans:0; font-size:12pt\"><span style=\"font-family:Calibri; font-weight:bold; color:#ff0000\">Evaluation Only. Created with Aspose.Words. Copyright 2003-2018 Aspose Pty Ltd.</span></p>", "");return result;
2.直接读取RTF,PDF等文件的内容的方式。
这个是使用RTFEditorKit来直接读取RTF中的文件,其中注意中文乱码的情况。
public InfoResult getAnnouncementDocument() {AnnouncementDO announcement = announcementDao.getFirst();ByteArrayInputStream bais = new ByteArrayInputStream(announcement.getAnnouncement());DefaultStyledDocument styledDoc = new DefaultStyledDocument(); String document=null;try {new RTFEditorKit().read(bais, styledDoc, 0); //直接读取rtf的内容,并且转化编码 document = new String(toGb2312(styledDoc.getText(0, styledDoc.getLength()))); } catch (IOException e) {log.error(e.getMessage(),e);} catch (BadLocationException e1) {log.error(e1.getMessage(),e1);}return new InfoResult(ActionResultEnum.SUCCESS, document);}private String toGb2312(String str) {if (str == null)return null;String retStr = str;byte b[];try {b = str.getBytes("ISO8859_1");for (int i = 0; i < b.length; i++) {byte b1 = b[i];if (b1 == 63)break; // 1else if (b1 > 0)continue;// 2else if (b1 < 0) { // 不可能为0,0为字符串结束符// 乱码retStr = new String(b, "gb2312");break;}}} catch (UnsupportedEncodingException e) {log.error(e.getMessage());}return retStr;}
3.直接生成PDF,然后转化为图片
这个也是在挣扎的过程中想到的方法。虽然并没有为最后的结果最初贡献,但是还是要记录一下,方便以后需要。
这个是利用了itext和pdfbox的包来实现的,首先创建一个PDF,存于本地,然后再将PDF的内容转化为图片。
关于itext。iText是用于生成PDF文档的一个开放源码的java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html等文件转化为PDF文件。详细信息可参考:https://www.cnblogs.com/chenpi/p/5534595.html
pdfbox也是一个用于pdf文档的开源的java项目工具,帮助新建的PDF处理文档和手动提取PDF文档中的内容等。pdfbox的API可参考:https://pdfbox.apache.org/
添加两个包的依赖。
<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>4.2.1</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.0-RC3</version></dependency>
然后创建一个简单的PDF。并生成图片。PDF生成之后,再加载生成图片之前,一定要先关闭编写器和文档。不然会报错。本来我是想把close()都放在finally里面。但是发现显示文档最后一行出错。
public void getAnnouncementIMG() {String fileName = "D:/demo.pdf";String imgName="D:/demo.png";Document document = new Document();PdfWriter writer = null;try {// 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。writer = PdfWriter.getInstance(document, new FileOutputStream(fileName));// 添加文档元数据信息document.open();document.add(new Paragraph("A Hello World PDF document."));document.close();writer.close();PDDocument doc = PDDocument.load(new File(fileName));PDFRenderer renderer = new PDFRenderer(doc);int pageCount = doc.getNumberOfPages();for (int i = 0; i < pageCount; i++) {BufferedImage image = renderer.renderImageWithDPI(i, 296);ImageIO.write(image, "PNG", new File(imgName));}} catch (DocumentException | IOException e) {log.info(e.getMessage(), e);}}
好了,分享到此结束,如果错误或者问题,烦请评论下方留言。
java中各种文件的相互转化相关推荐
- java中打开文件显示_从java程序中打开任何文件
在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...
- java语言 文件上传,java中实现文件上传的方法
java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...
- java中读取文件的方法
总结一下java中读取文件的方法: 方法一(逐行的读取文件内容): private FileReader fileReader; private BufferedReader bufferedRead ...
- 在Java中确定文件类型
以编程方式确定文件的类型可能非常棘手,并且已经提出并实现了许多基于内容的文件标识方法. Java中有几种可用于检测文件类型的实现,其中大多数很大程度上或完全基于文件的扩展名. 这篇文章介绍了Java中 ...
- 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...
我有一个创建FTPS连接的CreateFTPConnection类.使用此连接传输文件.这里是TransferFile类的代码如何创建一个"FTPS"模拟服务器以单元测试Java中 ...
- java 获取文件扩展名_如何在Java中获取文件扩展名
java 获取文件扩展名 Sometimes while working with files, we need to process them differently based on their ...
- java文件中获取创建日期_如何在Java中获取文件的上次修改日期
java文件中获取创建日期 Sometimes we need to get the file last modified date in Java, usually for listeners li ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- java中写入文件_java中创建、写入文件的5种方式
在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...
最新文章
- lr_save_string lr_eval_string使用介绍
- c++常量函数的理解
- error_reporting()
- stm32 不断的重新启动的原因
- Groovy中的任务的自定义属性设置
- Map.putAll方法——追加另一个Map对象到当前Map集合
- 关于Mathematica 的cdf 文件的嵌入应用
- 129.求根到叶子节点数字之和
- 视频教程-Three.Js (WebGL ThreeJs) 网页3D实战视频教程-其他
- 《数据库实验》实验五:数据库编程
- 【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制
- 海康录像机能用别的摄像头吗_海康威视录像机如何添加大华摄像头
- 企查查等人物关系图谱、企业图谱等效果
- y等于根号x用c语言程序表示出来,c语言描述x和y都大于或等于z的表达式是
- 黑马程序员前端JavaScript高级——ES6学习笔记
- ds18b20c语言keil,DS18B20温度检测调节程序(C代码)
- 畅通工程1863(并查集)(WA的思考)
- Date与Calander使用及异同
- 超声波模块测距 Arduino代码
- (排列组合的重复问题)
热门文章
- mysql 年龄段划分
- 南宁自驾与神州租车新体验
- input复选框获取选中的值
- 如何快速推广微信小程序,并通过微信小程序赚取睡后收入
- 一千个 Python 库打包,这就是一篇库的字典,哪里需要查哪里!
- 2021年高压电工证考试题库,高压电工试题解析
- 机器学习知识总结 —— 12. 机器与深度学习中常用术语 [D-J]
- rt-thread nano移植到新唐M031
- 232接口针脚定义_详解串口通信232/485/422,一文就可以搞定!
- ADAS自动驾驶学习之--FCW(原理、传感器组成、软件结构、测试验证、模型代码)