前言
最近項(xiàng)目中遇到了這樣一個(gè)使用場(chǎng)景轿偎,客戶端需要根據(jù)后臺(tái)返回的合同數(shù)據(jù)拌屏,生成一個(gè)文件,然后填充用戶數(shù)據(jù)后党觅,讓用戶進(jìn)行手寫簽名雌澄。
需求分析
后臺(tái)給我們客戶端什么數(shù)據(jù)?按照PC來(lái)說(shuō)杯瞻,可能我們會(huì)考慮直接把word格式的合同文檔發(fā)來(lái)镐牺,用戶填好信息后,在想辦法生成簽名的圖片魁莉,然后在添加到文檔中睬涧。這個(gè)過程想想就麻煩。于是思考了幾天后旗唁,初步形成了下面的思路畦浓。
- 首先合同以html格式發(fā)給客戶端,客戶端可以在webview中進(jìn)行預(yù)覽展示
- 接著要求用戶輸入一些信息逆皮,這些信息待會(huì)兒會(huì)填充到html中指定的位置
- 接著我們可以將替換了信息的html通過webview展示宅粥,并且可以輸出為pdf文件
- 再接著我們可以使用webview加載剛才生成好的未簽名的pdf,讓用戶進(jìn)行簽名电谣。
- 用戶簽名結(jié)束后秽梅,我們可以再生成簽名后的pdf文件
其中前兩步比較常規(guī)抹蚀,我們也經(jīng)常使用,所以不多提了企垦,我們主要從第三部講起环壤。
生成未簽名pdf
如何把webview展示的內(nèi)容導(dǎo)出為pdf。目前有兩種方式钞诡,一種是按照常用的視圖截圖方式郑现,將內(nèi)容保存為圖片,然后再生成pdf荧降,而另一種是直接使用ios提供的方法接箫,直接打印為pdf文件。這里推薦第二種方式朵诫,據(jù)說(shuō)比較清晰辛友,而且有封裝的比較完善的庫(kù),可以直接使用剪返。
比如:BNHtmlPdfKit
進(jìn)行簽名
簽名的思路是直接根據(jù)用戶手指的滑動(dòng)废累,生成貝塞爾曲線,模擬用戶手寫簽名脱盲。這一步的核心是邑滨,我們需要保存下來(lái)用戶簽名的軌跡信息,我們除了要在屏幕上向用戶展示簽名外钱反,還要根據(jù)簽名的軌跡信息掖看,來(lái)將簽名繪制到最終的pdf文件中。關(guān)于手寫簽名也有很多優(yōu)化手段诈铛,讀者可以看下面幾個(gè)不錯(cuò)的庫(kù)乙各。
Smooth-Line-View
PPSSignatureView
生成簽名pdf
前面兩步呢墨礁,我們拿到了未簽名的pdf和用戶的手寫簽名數(shù)據(jù)幢竹,接著我們需要把這二者結(jié)合起來(lái),生成簽名的pdf恩静。這里的思路就是:根據(jù)未簽名的pdf焕毫,一頁(yè)一頁(yè)的復(fù)制出來(lái)一份新的pdf,同時(shí)驶乾,在需要簽名的頁(yè)面邑飒,將簽名信息填充進(jìn)去。最后我們生成的就是簽名的pdf文件了级乐。