這個系列的文章主要講解如何處理本機文檔和互連網資料。今天要討論的主題是,如何把PDF文檔格式轉化為可以編輯的RTF格式。PDF格式本身是唯讀,需要Acrobat Professional這樣的軟體來編輯它的內容,或者在WORD中編輯好後,轉化為PDF格式。我要達到的目標是這樣的
指定的格式選擇項如果PDF被勾選,則Path路徑中所有的的PDF格式的文檔會被處理,之後再匯入文件資料庫中。
好了,為了達到這個目的,我嘗試了以下幾種方法
- Adobe Acrobat SDK 這是處理PDF文檔的官方開發包,也應該是最權威的處理工具。好像授權費用不菲,而且也找不到免費的版本。
- PDF.NET 這個工具包相當不錯,它包含了處理PDF格式的方方面面,而且提供Managed 程式碼的完整例子。試用版只能處理PDF文檔的前幾頁,而且會加上試用的浮水印。
- Aspose PDF.NET , Aspone Recognition 這兩個工具包也相當強大,好用。在轉換PDF為DOC格式時,有些限制,畢竟不是專業的OCR工具包。當你的PDF格式中包含有中文時,它就無法處理了。官方的Known Limitations中有說明到,Predefined composite fonts encodings used for Chinese, Japanese and Korean languages are not implemented。亞洲語言文字,在安裝作業系統時,這些語言套件也是另外單獨安裝的。
- Solid Converter PDF 這個工具,在轉換PDF到DOC格式方面,95%的內容都完整的保留和正確轉換。可惜沒有開發包,不能編程調用。
- 把PDF轉化為TIFF,再運用OCR技術把TIFF格式轉化為DOC格式。找到一些工具包,是OCX格式的控制項,主要是不穩定,也沒有提供純.NET的封裝。理論上.NET可以調用COM格式的組件包,實際上有些細節如何COM沒有處理好,.NET調用也會有些問題。
- Solid PDF Tools 這個工具,也提供相當好的PDF格式轉DOC格式工具。最重要的一點是,它可以接受命令列參數,這樣可以被我的程式調用。
經曆了層層選擇的痛苦,最後選中以命令列參數方式,調用第三方工具包。這樣轉換後的格式效果好,也就是選擇第5項的工具,Solid PDF Tools。所以,為了讓你的Data Loader中的Doc Scanner能正確工作以處理PDF格式文檔,請先安裝這個工具,Data Loader就是以它來轉換PDF格式的檔案的。
請看,這就是它的介面效果。這個軟體小巧,但是編輯PDF格式起來,絲毫不遜色於Adobe Professional。最重要的我喜歡的一點是,它支援命令列調用,可以被.NET或是任何的程式設計語言調用。
再來看一下,.NET的調用代碼是如何寫的,它的方法體如下
public static string ConvertPdfToDoc(string pdf) { string outputFolder = Path.GetDirectoryName(pdf); string outputFile = Path.Combine(Path.GetDirectoryName(pdf),
Path.GetFileNameWithoutExtension(pdf) + ".doc"); string pathWithFile = pdf.Replace(@"\", @"\\"); outputFolder = outputFolder.Replace(@"\", @"\\"); String sampleScript = @"<</FileName (" + pathWithFile + @")>> FileOpen <</WordDocumentType/Doc /OutputFolder (" + outputFolder + @") /ReconstructionMode/Flowing /LaunchViewer false>> ConvertToWord Exit"; SolidScript solidScript = new SolidScript("Solid PDF Tools");
// replace Solid PDF Tools with the product you're scripting solidScript.RunScript(sampleScript); return outputFile;}
是的,這就是Data Loader內部處理PDF文檔格式的全部細節,再調用SolidScript來產生進程調用,把參數傳遞到Solid PDF Tools的進程中。您如果不明白上面.NET代碼的含義,你可以參考下面的流程。
先開啟記事本,輸入如下的指令碼代碼,
<</FileName (G:\\TDDOWNLOAD\\solidwatcher\\bin\\Debug\\File.pdf)>> FileOpen
<</WordDocumentType/Doc /OutputFolder (G:\\Eclipse\\doc)
/ReconstructionMode/Flowing
/LaunchViewer false>> ConvertToWord
Exit
再啟動運行,命令列cmd,輸入如下命令
這樣,你就可以到看Solid PDF Tools對傳入參數的PDF格式的處理。把這個過程封裝為.NET指令碼代碼,就是上面您看到的ConvertPdfToDoc方法。
如果你不是為了能用代碼方式轉化PDF為DOC,你可以嘗試以下幾個工具,它們都是綠色的的小軟體,幫忙你把PDF格式轉化為DOC。
- 4Media PDF to Word Converter
- AnyBizSoftPDFConverterPortable
- Nitro PDF
- PDF To Word RTF Converter
- SimpoPDFConverterPortable
這五個工具都非常不錯。綠色,體積小。如果你需要command line調用,我推薦Solid PDF Tools。
在轉換PDF為DOC格式過程中,接觸到OCR技術,光學識別技術。它把PDF轉化為TIFF格式,再把TIFF格式轉化為DOC格式。對於OCR技術,業界最出名的莫過於ABBYY的SDK,它是目前最優秀的OCR技術的組件包之一。
來看一下,它的產品ABBYY FineReader 9,介面效果如
它可直接連接到硬體裝置,把掃描到的內容轉化為可以編輯的DOC格式。如果有精力也可以體驗一下ABBYY 的SDK,提供C++和.NET平台,各種平台語言的開發包。寫到這裡,也開始喜歡上C++代碼。在託管語言領域,有強大的Visual Studio,量身定製的C#語言和它的編譯器,大量的第三方組件廠商。然而在Unmanaged 程式碼領域,百花齊放。沒有微軟的壟斷性主導地位,各個軟體公司才有它們的專長,籍以此生存的技術資源。所以如果你感覺你的開發工具不好用,你購買的SDK還不夠友好,我覺得這就是你的機會,你以此改善和切入的機會。
請到epn.codeplex.com中下載最新版本的Data Loader程式和相關的開發文檔。