jtd格式文件轉換解析

来源:http://www.cnblogs.com/liaidai/archive/2017/06/12/6993557.html
-Advertisement-
Play Games

年後到現在的都在忙的項目中本人主要負責的模塊就是文件解析這一部分,做的時候是各種踩坑各種鬧心啊,好歹是終於結束了,現在把項目中各種文件的解析做個總結,以備後用,這次項目中主要解析的文檔包括office文件、pdf、csv、rtf、txt、jtd以及eml、msg和pst格式的郵件,還有rar和zip ...


年後到現在的都在忙的項目中本人主要負責的模塊就是文件解析這一部分,做的時候是各種踩坑各種鬧心啊,好歹是終於結束了,現在把項目中各種文件的解析做個總結,以備後用,這次項目中主要解析的文檔包括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文件,但是這其中存在幾個問題:

  1. 通過java程式調用vbs腳本並沒有返回值表明txt文件是否真的生成了,如果密碼是錯的是無法生成對應的txt文件的,我的處理方法每隔一段時間去查看一下txt文件是否生成了,一定次數後就判斷轉換失敗,次數是根據文件大小判斷的,如10M的文件就每隔5秒檢查一次,一共檢查10次,如果沒生成txt文件就判定失敗,這樣做在嘗試密碼的時候就十分浪費時間,並且還可能會出現文件比較大,或者機器配置不夠好,本來能夠生成txt文件的,但是檢查時間過了直接判定為不能正確轉換;
  2. 每次運行vbs腳本的時候都會打開一太郎軟體,並且在嘗試密碼的時候,如果密碼錯誤就會在部署應用的伺服器上出現一個windows的錯誤彈窗,雖然最後一太郎的進程會被殺掉,但是在沒有被殺掉之前客戶是能明顯看到一太郎程式和錯誤提示的,這個是很尷尬的事情;
  3. 如果jtd文件過大,比如文件達到30M的時候,腳本的轉換速度就很慢很慢了,在問題2中也說到了在文件的轉換過程中客戶是能在伺服器上看到一太郎程式的,如果客戶在此期間直接把一太郎幹掉了,那麼文件的轉換肯定是失敗的;

  以上的問題暫時還沒有解決,後面還要看在客戶那邊部署以後的使用情況,如果客戶那邊的jtd格式文件都是10M以下的,那麼應該是沒有太大的問題的,但是如果文件超過了30M,轉換的過程肯定會慢,並且隨時面臨著在轉換過程中一太郎軟體被幹掉的風險,具體怎麼樣還需要看客戶的試用情況了吧。

  關於jtd格式的文件解析暫時就說到這裡,至於jtd格式文件轉換成txt格式文件後內容的提取我會在後面寫的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近看了看JavaWeb的書籍,才感覺到大二時候學的JavaWeb才僅僅只是個入門。最尷尬的當初還沒咋學一直在看.NET,現在看起來JavaWeb,各種框架各種頭疼啊。看了幾個例子之後覺得,還是自己動手做個項目試試。邊做邊學才能學的快一點。做的時候用博客園記錄下過程,省得以後忘。之所以選圖書館管理系 ...
  • 本文是作者在學習了軟體工程(C編碼實踐篇)課程後的學習總結性質的文章 希望能通過自己的一些理解和經驗幫助大家更好地理解軟體工程的有關內容。。 學生 戢祥 課程地址《軟體工程(C編碼實踐篇)》MOOC課程http://mooc.study.163.com/course/USTC-1000002006 ...
  • 為瞭解決用一個命令(巨集)給方法,類,js方法添加註釋,經過幾天的研究.終於得到結果了. 實現的效果如下: 給Java中的method添加方法: 給 Java class 添加註釋: 給js 的方法添加註釋 現在把答案公佈如下 Abbreviation: Template text(註1): Edit ...
  • python ...
  • 一、ServerSocketChannel Java NIO中的 ServerSocketChannel 是一個可以監聽新進來的TCP連接的通道, 就像標準IO中的ServerSocket一樣。ServerSocketChannel類在 java.nio.channels包中。 打開 ServerS ...
  • 在spider中最後一個函數返回item時會scrapy會調用pipeline裡面的 ...
  • scrapy stratproject projectname ##創建一個項目 scrapy genspider myspidername fider ##創建一個spider文件 scrapy crawl spidername ## 執行一個spider程式 scrapy shell url # ...
  • 作業要示: 開發簡單的FTP:1. 用戶登陸2. 上傳/下載文件3. 不同用戶家目錄不同4. 查看當前目錄下文件5. 充分使用面向對象知識 REDMAE 服務端 servers/ bin/ registration.py 1 #!usr/bin/env python 2 #-*-coding:utf ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...