
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支持的文件格式,当然也支持批量转。笔者测试是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?所以只要知道了每个应用的原理,我们就可以千变万化,打造出我们属于自己的应用来。
参考资料:
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!