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. 使用 IntraWeb (5) - 页面布局之 TFrame
  2. legend3---laravel验证码使用
  3. 转载: Tortoise SVN使用方法,简易图解
  4. ADO.NET Entity Framework 基本概述
  5. 你以为ACI=SDN?大错特错!
  6. 丢失__EVENTTARGET _dopost Asp.net自带隐藏域和脚本的现象
  7. 37个JavaScript基本面试问题和解答
  8. C语言extern的用法
  9. 数据科学家是个性感的工作?我信你个鬼!
  10. linux下opencv读取图片并存储到mysql数据库中
  11. linux wget 命令_我如何使用wget Linux命令恢复丢失的图像
  12. PostgreSQL定时自动备份
  13. 相爱相杀:移动联通IT支撑回忆录(十四)
  14. 利用python将微信聊天记录生成词云
  15. 计算机听觉应用,计算机音乐系统和音乐听觉训练
  16. Springboot奶茶店点餐系统vtj89计算机毕业设计-课程设计-期末作业-毕设程序代做
  17. 海康威视E200Pro固态硬盘(联芸MAS0901)SMART信息解析
  18. STM8S---IO复用配置(STVP方式)
  19. ESP8266模块三种低功耗睡眠模式
  20. java图书管理系统目的_java_图书管理系统java版,本文的目的就是通过图书管理 - phpStudy...

热门文章

  1. Thymeleaf实现行内背景样式,补充行内样式属性
  2. mysql关键字使用
  3. 红外遥控编解码注意事项
  4. 网络安全学习路线,入门到入坟,史上最全网络安全学习路线整理
  5. win10 录屏快捷键
  6. 【CF739E】Gosha is hunting
  7. 美国事故数据分析报告
  8. 收银系统要服务器吗,门店有没有必要使用收银系统,收银系统的好处又是什么?...
  9. Java格式化ISO 8601 日期格式
  10. WPS输入长数字,去除前面的单引号‘