ImageDrawable.m 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // ImageDrawable.m
  3. // pdftest
  4. //
  5. // Created by Ray on 10/13/16.
  6. // Copyright © 2016 United Software Applications, Inc. All rights reserved.
  7. //
  8. #import "ImageDrawable.h"
  9. #import "RAUtils.h"
  10. #import "iSalesDB.h"
  11. @implementation ImageDrawable
  12. -(void) setDrawableTemplate:(NSMutableDictionary *)drawableTemplate
  13. {
  14. [super setDrawableTemplate:drawableTemplate];
  15. if(self.hAlign==nil)
  16. self.hAlign=@"center";
  17. if(self.vAlign==nil)
  18. self.vAlign=@"middle";
  19. }
  20. -(CGRect) Query_Rect:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
  21. {
  22. CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  23. return parentrect;
  24. }
  25. -(CGRect) Draw:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
  26. {
  27. // [super flipContext:context ContextHeight:flip_height];
  28. UIImage* image=nil;
  29. NSString * source=self.drawableTemplate[@"source_type"];
  30. if([source isEqualToString:@"const"])
  31. {
  32. image= [UIImage imageNamed:self.drawableTemplate[@"source"]];
  33. }
  34. else if([source isEqualToString:@"data"])
  35. {
  36. NSString* url=data[self.drawableTemplate[@"source"]];
  37. NSString* file_name=[url lastPathComponent];
  38. file_name=url;
  39. if(url.length==0)
  40. {
  41. image=nil;
  42. CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  43. [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
  44. return parentrect;
  45. }
  46. else
  47. {
  48. NSData* img_data=[iSalesDB load_cached_img:file_name loadFrom:url];
  49. if([self.drawableTemplate[@"source_path_type"] isEqualToString:@"local"])
  50. {
  51. img_data= [NSData dataWithContentsOfFile: file_name];
  52. }
  53. if(img_data!=nil)
  54. {
  55. image=[UIImage imageWithData:img_data];
  56. }
  57. else
  58. {
  59. image= [UIImage imageNamed:@"portfolio_img_404"];
  60. }
  61. }
  62. }
  63. // CGRect rect=[self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];//CGRectMake(self.rect.origin.x+x, self.rect.origin.y, self.rect.size.width, self.rect.size.height);
  64. // rect=CGRectMake(rect.origin.x, flip_height-rect.origin.y-rect.size.height, rect.size.width, rect.size.height);
  65. CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  66. CGRect scalerect = [RAUtils scaleToSize:CGRectMake(0, 0, image.size.width, image.size.height) to:parentrect.size];
  67. CGRect rect=[RAUtils rectAlign:parentrect rect:scalerect hAlign:self.hAlign vAlign:self.vAlign];
  68. //image=[RAUtils scaleToSize:image size:parentrect.size];
  69. rect= [self parent_to_pdf_rect:rect contextHeight:flip_height];
  70. //CGRect rect = [self to_pdf_rect:p_rect pos:self.rect contextHeight:flip_height];
  71. CGContextDrawImage(context, rect, image.CGImage);
  72. [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
  73. return parentrect;
  74. // return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
  75. // // 切换上下文 Core Graphics 和 UIKit 混用
  76. // UIGraphicsPushContext(context);
  77. //
  78. // // 使用UIKit绘制内容
  79. // [image drawInRect:rect];
  80. //
  81. // // 绘制完位图后,再恢复上下文
  82. // UIGraphicsPopContext();
  83. // [super restoreFlip:context ContextHeight:flip_height];
  84. }
  85. @end