FreeSWITCH的mod_spandsp模塊提供了基於SIP的傳真收發功能,但是mod_spandsp僅限於tiff文件,我們平時要發送的傳真文件大部分是非tiff的,因此在發送前,我們就需要將這些文件統一轉為tiff。
筆者在測試過程中發現Unoconv + Gostscript兩者結合可以將doc、docx、excel、txt、png、jpg完美的轉為tiff。
實際上是先用unoconv將原始文件統一轉為pdf,然後Gostscript再將轉換後的pdf文件轉為轉為tiff。下面分別介紹下Unoconv和Gostscript。
unoconv是一個命令行程序,用於在不同的Office文檔文件格式之間進行轉換。它利用OpenOffice.Org的UNO接口實現了命令行文檔格式轉換功能,支持所有OpenOffice支持的文件格式,當然也支持批量轉。
Ghostscript是一套基於Adobe系統的PostScript和可攜式文檔格式(PDF)頁面描述語言等而編譯成的免費軟體。可以顯示或列印文檔頁面,以及在PostScript和PDF文件之間的轉換。
筆者測試是virtualbox debian8.2虛擬機,debian8默認已經有Gostscript了,我們只需要安裝Unoconv,執行如下命令:
apt-get update && apt-get install -t jessie-backports unoconv
假設我們在/tmp目錄下有個test.png的文件,我們現在來把它轉成tiff。執行:
unoconv -f pdf /tmp/test.png
gs -q -r204x196 -g1728x1078 -dNOPAUSE -dBATCH \-dSAFER -sDEVICE=tiffg3 -sOutputFile=/tmp/test.tiff \ /tmp/test.pdf
之後在/tmp下我們就會看到test.tiff,然後我們就可以在FreeSWITCH中使用txfax將test.tiff發送給傳真接收方。
例如:originate sofia/gateway/gw1/xxxx &txfax(/tmp/test.tiff)。注意,其中「204x196」表示解析度。傳真文件的橫向和縱向的解析度是不同的。
傳真頁面也需要有特定的大小,大部分傳真機都能接收頁面大小為「1728x1078」的傳真,其它尺寸的因傳真機而異。
當然在實際應用中,我們不可能將一個個文件手動執行命令行去轉為tiff,我們需要開發一個中間件,比如筆者的項目中開發了一套系統,Web頁面上點擊發送傳真的時候,會彈出文件選擇框,選擇後,中間件程序會把原始文件轉為tiff,然後通過FreeSWITCH發送給我們提前設置好的對端。
另外,在實際生產中,我們還可以通過CUPS + Gostscript來實現文件的上傳和轉換。CUPS(以前是通用UNIX列印系統的縮寫)是一種模塊化的列印系統,用於類似UNIX的計算機作業系統,它允許計算機充當列印伺服器。
運行CUPS的計算機是一個主機,它可以接受來自客戶端計算機的列印作業,處理它們,並將它們發送到適當的印表機。下面說說這一詳細過程。
Debian8上通過apt-get install cups來安裝CUPS, CUPS實際上是一個集成的服務。包括了前端接收列印命令的程序,後端控制印表機的程序,中間則是列印驅動。首當CUPS接受到列印命令時,首先會進行一個格式的預轉換,比如將.txt等各種文件先轉換成PostScript格式,然後進一步將PostScript格式轉換成 CUPS內部格式,這裡我們不再深究。這裡我們最終的目的是要將上傳的文件轉為tiff,因此最後還需要調用Gostscript將PostScript轉為tiff。下面詳細說CUPS的配置過程。
在/etc/cups/printers.conf文件中添加我們自己的印表機FAX,內容如下:
我們主要說DeviceURI,DeviceURI 用來指出/usr/lib/cups/backend下的下一步處理程序,這裡指向下面的/usr/lib/cups/backend/腳本的testfax腳本,testfax腳本內容如下:
可以看到在在腳本中通過gs命令將PostScript轉為tiff。然後我們就可以進行傳真的發送了。當然配置有變動我們需要執行systemctl restart cups來重啟CUPS,然後在同一個區域網內添加我們剛創建好的網絡印表機,以win7為例:
選【控制面板】-> 【印表機和傳真】->【添加印表機】 ->【我的印表機不在列表中】->【添加網絡印表機】,輸入印表機路徑:http://伺服器IP:631/printers/FAX,驅動程序選擇 【General】 -> 【Publisher Color Printer】。然後打開一個文件,比如test.docx,我們點擊列印,使用我們剛添加的印表機,「列印」結束後,test.docx就轉為對應的tiff文件了。
是不是很Cool?所以只要知道了每個應用的原理,我們就可以千變萬化,打造出我們屬於自己的應用來。
參考資料:
廣告:本公眾號歡迎投稿。