jtd格式文件转换解析
年后到现在的都在忙的项目中本人主要负责的模块就是文件解析这一部分,做的时候是各种踩坑各种闹心啊,好歹是终于结束了,现在把项目中各种文件的解析做个总结,以备后用,这次项目中主要解析的文档包括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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在电脑中删除或解压缩文件夹,时有时候会弹出提示对话框“错误0x80004005:未指定错误”,如果遇到这中情况应该怎么解决呢?提示错误代码0x80004005的原因其实有很多,但大部分因为病毒导致,我们可以重新注册dll来解决问题,下面,小编给大伙讲解0x80004005错误代码处理经验。有用户在使用电脑时出现错误代码0X80004005的提示,0x80004005错误主要是由于计算机没有正确注册某些动态链接库文件,或者计算机与Internet之间存在不允许的HTTPS连接防火墙所引起。那么如何

最近有很多网友问小编,hiberfil.sys是什么文件?hiberfil.sys占用了大量的C盘空间可以删除吗?小编可以告诉大家hiberfil.sys文件是可以删除的。下面就来看看详细的内容。hiberfil.sys是Windows系统中的一个隐藏文件,也是系统休眠文件。通常存储在C盘根目录下,其大小与系统安装内存大小相当。这个文件在计算机休眠时被使用,其中包含了当前系统的内存数据,以便在恢复时快速恢复到之前的状态。由于其大小与内存容量相等,因此它可能会占用较大的硬盘空间。 hiber

全角英文字母转换为半角形式的实用技巧在现代生活中,我们经常会接触到英文字母,在使用电脑、手机等设备时也经常需要输入英文字母。然而,有时候我们会遇到全角英文字母的情况,而我们需要使用的是半角形式。那么,如何将全角英文字母转换为半角形式呢?下面就为大家介绍一些实用的技巧。首先,全角英文字母和数字是指在输入法中占据一个全角位置的字符,而半角英文字母和数字则是占据一

这篇文章将详细介绍如何将PHP中的月份转换为英文月份的方法,同时给出具体的代码示例。在PHP开发中,有时候我们需要将数字表示的月份转换为英文的月份,这在一些日期处理或数据展示的场景下非常实用。下面将从实现原理、具体代码示例和注意事项等方面进行详解。一、实现原理在PHP中,可以通过使用DateTime类和format方法来实现将数字月份转换为英文月份。Date

qq音乐让大家尽情享受观影解闷,每天都可以使用这个软件,轻松满足自己的使用,优质海量的歌曲,任由大家畅听,也可以下载保存起来,下次听的时候,不需要网络,而在这里下载的歌曲不是MP3格式的,无法在其他平台使用,会员歌曲过期后也没有办法再听了,所以很多小伙伴们,都想要将歌曲转换成MP3格式的,在这里小编为你们提供方法,帮助大家都可以使用起来! 1、打开电脑qq音乐,点击右上角【主菜单】按钮,点击【音频转码】,选择【添加歌曲】选项,添加需要转换的歌曲; 2、添加歌曲完毕,点击选择转换为【mp3

PHP教程:如何将int类型转换为字符串在PHP中,将整型数据转换为字符串是一种常见的操作。本教程将介绍如何使用PHP内置的函数将int类型转换为字符串,同时提供具体的代码示例。使用强制类型转换:在PHP中,可以使用强制类型转换的方式将整型数据转换为字符串。这种方法非常简单,只需要在整型数据前加上(string)即可将其转换为字符串。下面是一个简单的示例代码

全角英文字母变为半角字母的方法在日常生活和工作中,有时候我们会遇到需要将全角英文字母转换为半角字母的情况,比如在输入电脑密码、编辑文档或者设计排版时。全角英文字母和数字是指宽度与中文字符相同的字符,而半角英文字母则是指宽度较窄的字符。在实际操作中,我们需要掌握一些简单的方法,来将全角英文字母转换为半角字母,以便更方便地处理文本和数字。一、全角英文字母与半角英

【PHP中点的含义和用法解析】在PHP中,中点(.)是一个常用的操作符,用于连接两个字符串或者对象的属性或方法。在本文中,我们将深入探讨PHP中点的含义和用法,并通过具体的代码示例加以说明。1.连接字符串中点操作符.在PHP中最常见的用法是连接两个字符串。通过将.放置在两个字符串之间,可以将它们拼接在一起,形成一个新的字符串。$string1=&qu
