[iOS]將ScrollView上的內容生成為PDF文件

最近完成一個項目聘惦,就是將ScrollView上的內容生成為PDF文件痹束,同時在原視圖上忽略一些圖片的顯示痢掠,這里記錄一下實現(xiàn)思路。

思路

  • 1.保存需要打印的視圖的初始Frame和原有父視圖匹厘。
  • 2.設置需要打印的內容寬高(包括左右上下的空白)。
  • 3.生成一個背景視圖脐区,該視圖的寬高為需要打印內容的寬高愈诚。
  • 4.重新設置Scrollview的Frame和父視圖,此時的父視圖就是背景視圖。
  • 5.使用UIGraphics框架進行PDF的生成炕柔。
  • 6.將ScrollView的Frame和父視圖進行恢復酌泰,恢復為初始狀態(tài)。
  • 7.對生成的PDF數(shù)據(jù)進行處理匕累。

Demo 在鏈接下PDFDemo中

戳此獲取Demo

主要代碼如下:

-(NSMutableData*)createPDFfromUIScrollView:(UIScrollView*)scrollView {
    
    //存儲ScrollView的初始位置及父視圖
    CGRect origRect = scrollView.frame;
    UIView *origSuperView = scrollView.superview;
    
    //此處可以做一些子視圖的處理陵刹,比如忽略ScrollView上一些圖片的打印,需要將該圖片視圖進行適時的隱藏
    
    //創(chuàng)建一個新的用來顯示的pdf的大小欢嘿,這里為內容上下各預留了20的偏移
    CGRect rootRect = CGRectMake(0, 0, 595, scrollView.contentSize.height + 40);
    //重新計算scrollview的frame衰琐,新frame處于背景的中間,同時际插,為了能打印所有內容碘耳,將size設置為contentsize
    CGRect newScrollRect = CGRectMake((595 - scrollView.contentSize.width) / 2., 20, scrollView.contentSize.width, scrollView.contentSize.height);
    //重新為scrollview設置frame,并從原父視圖移除
    [scrollView removeFromSuperview];
    scrollView.frame = newScrollRect;
    
    //設置背景圖框弛,這里的背景圖寬度為A4的寬度595
    UIView *rootView = [[UIView alloc] initWithFrame:rootRect];
    rootView.backgroundColor = [UIColor whiteColor];
    //將需要打印的內容放置在新的背景圖上
    [rootView addSubview:scrollView];
    
    //聲明存儲打印數(shù)據(jù)的數(shù)據(jù)結構
    NSMutableData *pdfData = [NSMutableData data];
    //設置要打印出來的文件的寬高
    UIGraphicsBeginPDFContextToData(pdfData, rootRect, nil);
    //開始打印
    UIGraphicsBeginPDFPage();
    CGContextRef pdfContext = UIGraphicsGetCurrentContext();
    [rootView.layer renderInContext:pdfContext];
    //結束打印
    UIGraphicsEndPDFContext();
    
    //將scrollview的frame與父視圖設置為初始狀態(tài)
    scrollView.frame = origRect;
    [origSuperView addSubview:scrollView];
    
    //此處對可以進行對子視圖的恢復辛辨,比如說圖片視圖的恢復顯示
    
    //輸出打印數(shù)據(jù),根據(jù)需要進行數(shù)據(jù)的存儲或傳輸
    return pdfData;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末瑟枫,一起剝皮案震驚了整個濱河市斗搞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慷妙,老刑警劉巖僻焚,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膝擂,居然都是意外死亡虑啤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門架馋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狞山,“玉大人,你說我怎么就攤上這事叉寂∑计簦” “怎么了?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵屏鳍,是天一觀的道長勘纯。 經常有香客問我,道長钓瞭,這世上最難降的妖魔是什么驳遵? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮山涡,結果婚禮上超埋,老公的妹妹穿的比我還像新娘搏讶。我一直安慰自己,他們只是感情好霍殴,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布媒惕。 她就那樣靜靜地躺著,像睡著了一般来庭。 火紅的嫁衣襯著肌膚如雪妒蔚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天月弛,我揣著相機與錄音肴盏,去河邊找鬼。 笑死帽衙,一個胖子當著我的面吹牛菜皂,可吹牛的內容都是我干的。 我是一名探鬼主播厉萝,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼蚕钦,長吁一口氣:“原來是場噩夢啊……” “哼额湘!你這毒婦竟也來了颈墅?” 一聲冷哼從身側響起存哲,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翩剪,沒想到半個月后乳怎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡前弯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年蚪缀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恕出。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡询枚,死狀恐怖,靈堂內的尸體忽然破棺而出剃根,到底是詐尸還是另有隱情,我是刑警寧澤前方,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布狈醉,位于F島的核電站,受9級特大地震影響惠险,放射性物質發(fā)生泄漏苗傅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一班巩、第九天 我趴在偏房一處隱蔽的房頂上張望渣慕。 院中可真熱鬧嘶炭,春花似錦、人聲如沸逊桦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽强经。三九已至睡陪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匿情,已是汗流浹背兰迫。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炬称,地道東北人汁果。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像玲躯,于是被迫代替她去往敵國和親据德。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內容