年后到现在的都在忙的项目中本人主要负责的模块就是文件解析这一部分,做的时候是各种踩坑各种闹心啊,好歹是终于结束了,现在把项目中各种文件的解析做个总结,以备后用,这次项目中主要解析的文档包括office文件、pdf、csv、rtf、txt、jtd以及eml、msg和pst格式的邮件,还有rar和zip压缩包的解压,其实还有一个mlf格式的文件,但是这个经过我的研究以及公司大佬的研究,暂时没法攻克难关,所以这种格式的文件就只能暂时先放弃了,其他的解析都是做出来了的,主要就是这些,后面我会一个一个的全部总结出来,关于文件的解析本人使用的是apache的Tika做的。
今天我们就先来看一下这个jtd文件的解析,可能有人不知道这个jtd文件是什么,我这里先做个解释:
jtd格式文件是由日本的文字处理软件一太郎生成的文件格式
可以理解成jtd格式文件就是我们平常用的word,只不要需要用一太郎软件才能编辑打开,给大家看一下这个一太郎软件长什么样子:
刚看到这个需求的时候很尴尬啊,这个怎么做,还是日本的软件,查资料也看不懂啊,在百度和stackoverflow上查也没查到,这时候多亏了公司一位能看的懂日语的大佬啊,这位大佬在一个日语的网站上找到了解决办法,网站地址是http://d.hatena.ne.jp/satorufujimori/20070227/1172549793
解决办法就是使用vbs脚本,将jtd格式文件转换为txt文件,然后再解析相应的txt获取到内容,网站上的脚本如下所示:
//taro2txt.vbs Set taro = CreateObject("JXW.Application") taro.Visible = True taro.Documents.Open "c:\taro\a.jtd" taro.ActiveDocument.SaveAs "c:\out\a.txt", "", "", "", 10, "ShiftJIS" //※1 taro.Quit
大家注意其中的10,这是个标识符,10表示将jtd格式文件转换成txt格式的文件,如果想要将jtd格式文件转换成其他格式的文件需要将10换成其他的标识符,但是比较尴尬的是我们并没有找到具体的文档说明到底哪个数字表示哪种文档,然后当时我从0试到100,乱七八糟的格式出来了一大堆,有用的只有这个10,也就是只能将jtd格式的文件转换成txt格式的文件,这样的话原本文件中的图片就都消失了,但是我们的业务是将文件内容读取出来,入solr做检索的,所以没有图片就没有图片了,后来也就采用了这种办法来解决问题。
通过上面脚本是可以转换不带密码的jtd文件为txt文件,但是贼尴尬的是我们的jtd格式的文件是带有密码的,这个就尴尬了,不过幸好最后也解决了,我忘了当时是怎么解决的,但是解决办法如下所示:
//taro2txt.vbs Set taro = CreateObject("JXW.Application") taro.Visible = True taro.Documents.Open "c:\taro\a.jtd",password//在此处加上密码 taro.ActiveDocument.SaveAs "c:\out\a.txt", "", "", "", 10, "ShiftJIS" //※1 taro.Quit
脚本完成后直接点击运行就可以将特定的jtd文件转换成txt文件,然后再去处理txt文件提取内容即可(txt格式文件内容提取后面会在另外的文章中说明)。
上面的问题解决了,但是还有问题,我总不能为所有的jtd文件都建一个脚本文件吧,况且客户那边有哪些文件我也不知道,所以就想着给vbs脚本传递参数,虽然不会vbs的语法,但是按照网上说的照猫画虎还是写出来了,具体的脚本内容如下所示:
Option Explicit Dim a0 : a0 = WScript.Arguments(0) Dim a1 : a1 = WScript.Arguments(1) Dim a2 : a2 = WScript.Arguments(2) Dim taro ExchangeFile a0, a1, a2 Sub ExchangeFile(src,dest,password) Set taro = CreateObject("JXW.Application") taro.Visible = True taro.Documents.Open src,password taro.ActiveDocument.SaveAs dest, "", "", "", 10, "" taro.Quit End Sub
其中a0表示的是jtd文件的路径,a1表示要生成的txt格式文件的路径,a2表示jtd文件的密码,其实就是传递参数调用函数的过程。
脚本完善以后就是使用java调用vbs脚本的问题,这个问题我在stackoverflow上找到了答案,调用方法如下所示:
public static void main(String[] args) { try { Runtime.getRuntime().exec( "wscript D:/Send_Mail_updated.vbs" ); } catch( IOException e ) { System.out.println(e); System.exit(0); } }
通过以上的一系列步骤就可以成功的将jtd文件转换成txt文件,但是这其中存在几个问题:
通过java程序调用vbs脚本并没有返回值表明txt文件是否真的生成了,如果密码是错的是无法生成对应的txt文件的,我的处理方法每隔一段时间去查看一下txt文件是否生成了,一定次数后就判断转换失败,次数是根据文件大小判断的,如10M的文件就每隔5秒检查一次,一共检查10次,如果没生成txt文件就判定失败,这样做在尝试密码的时候就十分浪费时间,并且还可能会出现文件比较大,或者机器配置不够好,本来能够生成txt文件的,但是检查时间过了直接判定为不能正确转换;
每次运行vbs脚本的时候都会打开一太郎软件,并且在尝试密码的时候,如果密码错误就会在部署应用的服务器上出现一个windows的错误弹窗,虽然最后一太郎的进程会被杀掉,但是在没有被杀掉之前客户是能明显看到一太郎程序和错误提示的,这个是很尴尬的事情;
如果jtd文件过大,比如文件达到30M的时候,脚本的转换速度就很慢很慢了,在问题2中也说到了在文件的转换过程中客户是能在服务器上看到一太郎程序的,如果客户在此期间直接把一太郎干掉了,那么文件的转换肯定是失败的;
以上的问题暂时还没有解决,后面还要看在客户那边部署以后的使用情况,如果客户那边的jtd格式文件都是10M以下的,那么应该是没有太大的问题的,但是如果文件超过了30M,转换的过程肯定会慢,并且随时面临着在转换过程中一太郎软件被干掉的风险,具体怎么样还需要看客户的试用情况了吧。
关于jtd格式的文件解析暂时就说到这里,至于jtd格式文件转换成txt格式文件后内容的提取我会在后面写的。
以上是jtd格式文件转换解析的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),