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中各种文件的相互转化相关推荐

  1. java中打开文件显示_从java程序中打开任何文件

    在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...

  2. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

  3. java中读取文件的方法

    总结一下java中读取文件的方法: 方法一(逐行的读取文件内容): private FileReader fileReader; private BufferedReader bufferedRead ...

  4. 在Java中确定文件类型

    以编程方式确定文件的类型可能非常棘手,并且已经提出并实现了许多基于内容的文件标识方法. Java中有几种可用于检测文件类型的实现,其中大多数很大程度上或完全基于文件的扩展名. 这篇文章介绍了Java中 ...

  5. 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...

    我有一个创建FTPS连接的CreateFTPConnection类.使用此连接传输文件.这里是TransferFile类的代码如何创建一个"FTPS"模拟服务器以单元测试Java中 ...

  6. java 获取文件扩展名_如何在Java中获取文件扩展名

    java 获取文件扩展名 Sometimes while working with files, we need to process them differently based on their ...

  7. java文件中获取创建日期_如何在Java中获取文件的上次修改日期

    java文件中获取创建日期 Sometimes we need to get the file last modified date in Java, usually for listeners li ...

  8. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

  9. java中写入文件_java中创建、写入文件的5种方式

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...

最新文章

  1. lr_save_string lr_eval_string使用介绍
  2. c++常量函数的理解
  3. error_reporting()
  4. stm32 不断的重新启动的原因
  5. Groovy中的任务的自定义属性设置
  6. Map.putAll方法——追加另一个Map对象到当前Map集合
  7. 关于Mathematica 的cdf 文件的嵌入应用
  8. 129.求根到叶子节点数字之和
  9. 视频教程-Three.Js (WebGL ThreeJs) 网页3D实战视频教程-其他
  10. 《数据库实验》实验五:数据库编程
  11. 【硬石科技】电机系列教学(基于STM32)——PID算法实现闭环控制
  12. 海康录像机能用别的摄像头吗_海康威视录像机如何添加大华摄像头
  13. 企查查等人物关系图谱、企业图谱等效果
  14. y等于根号x用c语言程序表示出来,c语言描述x和y都大于或等于z的表达式是
  15. 黑马程序员前端JavaScript高级——ES6学习笔记
  16. ds18b20c语言keil,DS18B20温度检测调节程序(C代码)
  17. 畅通工程1863(并查集)(WA的思考)
  18. Date与Calander使用及异同
  19. 超声波模块测距 Arduino代码
  20. (排列组合的重复问题)

热门文章

  1. mysql 年龄段划分
  2. 南宁自驾与神州租车新体验
  3. input复选框获取选中的值
  4. 如何快速推广微信小程序,并通过微信小程序赚取睡后收入
  5. 一千个 Python 库打包,这就是一篇库的字典,哪里需要查哪里!
  6. 2021年高压电工证考试题库,高压电工试题解析
  7. 机器学习知识总结 —— 12. 机器与深度学习中常用术语 [D-J]
  8. rt-thread nano移植到新唐M031
  9. 232接口针脚定义_详解串口通信232/485/422,一文就可以搞定!
  10. ADAS自动驾驶学习之--FCW(原理、传感器组成、软件结构、测试验证、模型代码)