在我前幾篇文章里面分別介紹了PDF文件預(yù)覽的幾種方法锅论、PDF文檔的格式轉(zhuǎn)換践惑,今天來介紹下怎么實現(xiàn)PDF文檔批注與修改的功能铲敛。在iOS系統(tǒng)下直接實現(xiàn)PDF批注的功能有些困難膜眠,這個時候就要借助第三方福昕來實現(xiàn)這些功能拗踢,大家可以點進(jìn)去了解一下脚牍,廢話不多說。
PDF工具包介紹
首先去官網(wǎng)下載工具包,比較坑爹的是要先注冊個賬號才能下載巢墅。需要注意的是使用工具包有以下系統(tǒng)要求:
- iOS 8.0及以上版本
- 對Objective-C語言莫矗,須Xcode 7.0及以上版本
- 對Swift語言,須Xcode 8.0及以上版本
打開libs文件夾是我們主要需要用到的東西
- FoxitRDK.framework - 動態(tài)庫
- libFoxitRDKUIExtensions.a - 靜態(tài)庫
- uiextensions - UI EXTENSIONS組件
UI EXTENSIONS組件基于View Control提供砂缩,支持自定義用戶界面作谚,且包括大量的內(nèi)置工具,如文本選擇庵芭、文本標(biāo)注和繪圖妹懒、表單填寫、自定義文本輸入双吆、標(biāo)準(zhǔn)和動態(tài)圖章眨唬、夜間模式、大綱導(dǎo)覽和全文搜索等 好乐。這是一套高級的帶內(nèi)置界面的PDF擴(kuò)展工具匾竿,提供了默認(rèn)的界面和交互,同時提供了組件源代碼蔚万,開發(fā)人員可以通過對源代碼的直接修改岭妖,來實現(xiàn)默認(rèn)交互,以及默認(rèn)界面的修改。
運行下里面的Demo,先看下效果圖:
集成
下載好的工具包里面有一份開發(fā)文檔昵慌,開發(fā)文檔里面有介紹具體怎么集成假夺,不過是一份全英文的文檔,不知道為什么國內(nèi)公司開發(fā)的工具包不提供一份中文文檔斋攀,還好那些英文我還能看得懂已卷,但是我不推薦大家看那份文檔,很坑淳蔼,一些重要的東西沒講到侧蘸,我當(dāng)時看了幾天,踩了很多坑鹉梨。所以我自己又簡單封裝了里面的一些主要代碼讳癌。我這邊來介紹一下怎么集成它的SDK。
-
第一步:將WYPDFEditTool文件夾拖入至工程中俯画,該文件夾可以在文章末尾的Demo里面找到。
-
第二步:將Demo里面的[libs]文件夾拖到工程根目錄文件夾下司草,切記不要和上一步一樣導(dǎo)入工程里艰垂,因為里面的代碼大部分是在MRC環(huán)境下寫的,直接導(dǎo)入工程會報很多錯埋虹,再提醒一遍是拖到根目錄文件夾下猜憎。
-
第三步:嵌入依賴庫
-
第四步:在other Linker Flags里面添加
-objc
、-force_load
,然后將WYPDFEditTool文件夾下的libFoxitRDKUIExtensions.a文件按照圖示拖到指定位置搔课。
按照這個步驟來就算是集成成功了胰柑。
實現(xiàn)PDF批注功能
集成成功之后就可以寫代碼了,我自己寫了一個Demo示例爬泥,簡單實現(xiàn)了PDF涂鴉、PDF添加文字袍啡、PDF全文搜索的功能踩官。先看下效果圖:
我這邊是寫了一個單例類去實現(xiàn)一些簡單的PDF批注功能,這里貼上.h代碼,具體實現(xiàn)代碼可以在文章末尾下載我的Demo:
#import <Foundation/Foundation.h>
#import <FoxitRDK/FSPDFObjC.h>
#import "FoxitRDK/FSPDFViewControl.h"
#import "../../../libs/uiextensions_src/uiextensions/UIExtensionsManager.h"
typedef NS_ENUM(NSInteger, WYPDFAnnotType){
WYPDFAnnotTypeSelect,
WYPDFAnnotTypeNote, // 文字標(biāo)注
WYPDFAnnotTypeMarkup, // 添加高亮標(biāo)記
WYPDFAnnotTypeShape, // 添加形狀選框
WYPDFAnnotTypeFreetext, // 添加自由文本
WYPDFAnnotTypePencil, // 畫筆涂鴉
WYPDFAnnotTypeEraser, // 橡皮擦
WYPDFAnnotTypeLine, // 直線
WYPDFAnnotTypeStamp, // 圖章
WYPDFAnnotTypeInsert, // 插入文字
WYPDFAnnotTypeReplce, // 替換
WYPDFAnnotTypeAttachment, // 附件
WYPDFAnnotTypeSignature, // 簽名
WYPDFAnnotTypeSearch // 全文搜索
};
@interface WYPDFManager : NSObject
/**
set pdfView frame
*/
@property (nonatomic, assign) CGRect pdfDocFrame;
+ (instancetype)defalutManager;
/**
unlock Foxit MobilePDF SDK using a license before calling any APIs.
*/
+ (BOOL)applyTheLicenseKey;
/**
打開文檔
@param filePath 文檔路徑
*/
- (void)openPDFDocWithFilePath:(NSString *)filePath showInView:(UIView *)view;
/**
添加文檔編輯功能
*/
- (void)addAnnotToolHandle:(WYPDFAnnotType)annotType;
/**
取消編輯功能返回預(yù)覽模式
*/
- (void)cancalAnnot;
/**
保存修改后的文檔
*/
- (BOOL)savePDFDocWithFilePath:(NSString *)filePath;
@end
這里需要注意的幾個地方:
-
#import"../../../libs/uiextensions_src/uiextensions/UIExtensionsManager.h"
境输,這邊導(dǎo)入的頭文件就是我們放在工程根目錄下的那個文件夾里的文件蔗牡,如果這里報錯說找不到頭文件,只需要調(diào)整../的個數(shù)嗅剖,../代表的是父級目錄也就是上級目錄辩越。 -
+ (BOOL)applyTheLicenseKey;
,想使用批注功能必須先調(diào)一遍這個方法。建議在AppDelegate.m
中實現(xiàn)信粮。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/****************** Apply the license key ******************/
[WYPDFManager applyTheLicenseKey];
return YES;
}
然后是在VC里面調(diào)用單例類的方法去實現(xiàn)批注功能
- 打開文檔
// 打開PDF文檔
[[WYPDFManager defalutManager] openPDFDocWithFilePath:self.pdfPath showInView:self.contentView];
// 設(shè)置Frame
[WYPDFManager defalutManager].pdfDocFrame = CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 49 - 64);
- 實現(xiàn)具體功能
/****************** 保存 ******************/
- (void)saveClick{
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"123.pdf"];
[[WYPDFManager defalutManager] savePDFDocWithFilePath:filePath];
}
/****************** 畫筆涂鴉 ******************/
- (IBAction)pencilClick:(UIButton *)sender {
[[WYPDFManager defalutManager] addAnnotToolHandle:WYPDFAnnotTypePencil];
}
/****************** 添加文字 ******************/
- (IBAction)wordClick:(UIButton *)sender {
[[WYPDFManager defalutManager] addAnnotToolHandle:WYPDFAnnotTypeFreetext];
}
/****************** 全文搜索 ******************/
- (IBAction)searchClick:(UIButton *)sender {
[[WYPDFManager defalutManager] addAnnotToolHandle:WYPDFAnnotTypeSearch];
}
/****************** 取消編輯動作 ******************/
- (IBAction)completClick:(UIButton *)sender {
[[WYPDFManager defalutManager] cancalAnnot];
}
其實實現(xiàn)批注功能主要就是一句代碼[[WYPDFManager defalutManager] addAnnotToolHandle:<#(WYPDFAnnotType)#>];
然后根據(jù)枚舉值選擇你需要的批注功能
typedef NS_ENUM(NSInteger, WYPDFAnnotType){
WYPDFAnnotTypeSelect,
WYPDFAnnotTypeNote, // 文字標(biāo)注
WYPDFAnnotTypeMarkup, // 添加高亮標(biāo)記
WYPDFAnnotTypeShape, // 添加形狀選框
WYPDFAnnotTypeFreetext, // 添加自由文本
WYPDFAnnotTypePencil, // 畫筆涂鴉
WYPDFAnnotTypeEraser, // 橡皮擦
WYPDFAnnotTypeLine, // 直線
WYPDFAnnotTypeStamp, // 圖章
WYPDFAnnotTypeInsert, // 插入文字
WYPDFAnnotTypeReplce, // 替換
WYPDFAnnotTypeAttachment, // 附件
WYPDFAnnotTypeSignature, // 簽名
WYPDFAnnotTypeSearch // 全文搜索
};
我這里只是封裝了一些很簡單的功能黔攒,還有很多功能大家可以自行研究官方Demo和開發(fā)文檔。
補(bǔ)充
因為官方Demo都是全英文的,就連一些文字提示也是英文亏钩,如果需要把它改成中文莲绰,可以修改WYPDFEditTool文件夾下的Localizable.string文件。
福昕提供的SDK不是免費的姑丑,我這邊用的是試用版的蛤签,大概兩個禮拜就會到期,所以如果程序崩潰栅哀,很有可能就是試用到期了震肮,要重新去官網(wǎng)下載最新的SDK包更換sn和key,如果是要集成到自己公司項目里,那估計是要去買正式版的來使用了留拾,好像價格還不便宜戳晌。
如果發(fā)現(xiàn)本文有任何錯誤還請多多指出,包括如果大家發(fā)現(xiàn)更好的解決方法也請告訴我痴柔,謝謝B儋恕!咳蔚!