ImageDrawable.m 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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 "ImageUtils.h"
  10. //#import "iSalesDB.h"
  11. #import "RAUtils.h"
  12. @implementation ImageDrawable
  13. -(instancetype) init:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source hAlign:(NSString*)hAlign vAlign:(NSString*)vAlign
  14. {
  15. if (self = [super init]) {
  16. // NSMutableDictionary* m1=[drawableTemplate mutableCopy];
  17. // NSMutableDictionary* m2=[drawableTemplate mutableCopy];
  18. // [self setDrawableTemplate:[[RAUtils string2dict:[RAUtils dict2string:drawableTemplate]] mutableCopy] ];
  19. NSMutableDictionary * drawableTemplate = [ImageDrawable createImageTemplate:rect source_type:source_type source:source hAlign:hAlign vAlign:vAlign];
  20. [self setDrawableTemplate: [[RAUtils copyDict:drawableTemplate] mutableCopy]];
  21. // [self setDrawableTemplate:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:drawableTemplate]] ];
  22. }
  23. return self;
  24. }
  25. +(NSMutableDictionary *) createImageTemplate:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source hAlign:(NSString*)hAlign vAlign:(NSString*)vAlign
  26. {
  27. if(hAlign.length==0)
  28. hAlign= @"Center";
  29. if(vAlign.length==0)
  30. vAlign= @"Middle";
  31. NSMutableDictionary* ret=[super createDrawableTemplate:rect];
  32. ret[@"type"]=@"img" ;
  33. ret[@"source_type"]=source_type ;
  34. ret[@"source"]=source ;
  35. ret[@"hAlign"]=hAlign ;
  36. ret[@"vAlign"]=vAlign ;
  37. return ret;
  38. }
  39. -(void) setDrawableTemplate:(NSMutableDictionary *)drawableTemplate
  40. {
  41. [super setDrawableTemplate:drawableTemplate];
  42. if(self.hAlign==nil)
  43. self.hAlign=@"center";
  44. if(self.vAlign==nil)
  45. self.vAlign=@"middle";
  46. }
  47. -(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
  48. {
  49. CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  50. return parentrect;
  51. }
  52. -(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
  53. {
  54. // [super flipContext:context ContextHeight:flip_height];
  55. UIImage* image=nil;
  56. NSString * source=self.drawableTemplate[@"source_type"];
  57. if([source isEqualToString:@"const"])
  58. {
  59. image= [UIImage imageNamed:self.drawableTemplate[@"source"]];
  60. }
  61. else if([source isEqualToString:@"local"])
  62. {
  63. image= [UIImage imageWithContentsOfFile:self.drawableTemplate[@"source"]];
  64. }
  65. else if([source isEqualToString:@"data"])
  66. {
  67. NSString* url=data[self.drawableTemplate[@"source"]];
  68. NSString* file_name=[url lastPathComponent];
  69. file_name=url;
  70. if(url.length==0)
  71. {
  72. image=nil;
  73. CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  74. [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
  75. return parentrect;
  76. }
  77. else
  78. {
  79. NSData* img_data=[ImageUtils load_cached_img:file_name loadFrom:url];
  80. if([self.drawableTemplate[@"source_path_type"] isEqualToString:@"local"])
  81. {
  82. img_data= [NSData dataWithContentsOfFile: file_name];
  83. }
  84. if(img_data!=nil)
  85. {
  86. image=[UIImage imageWithData:img_data];
  87. }
  88. else
  89. {
  90. image= [UIImage imageNamed:@"portfolio_img_404"];
  91. }
  92. }
  93. }
  94. // 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);
  95. // rect=CGRectMake(rect.origin.x, flip_height-rect.origin.y-rect.size.height, rect.size.width, rect.size.height);
  96. CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  97. CGRect scalerect = [ImageUtils scaleToSize:CGRectMake(0, 0, image.size.width, image.size.height) to:parentrect.size];
  98. CGRect rect=[ImageUtils rectAlign:parentrect rect:scalerect hAlign:self.hAlign vAlign:self.vAlign];
  99. //image=[RAUtils scaleToSize:image size:parentrect.size];
  100. rect= [self parent_to_pdf_rect:rect contextHeight:flip_height];
  101. //CGRect rect = [self to_pdf_rect:p_rect pos:self.rect contextHeight:flip_height];
  102. CGContextDrawImage(context, rect, image.CGImage);
  103. [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
  104. return parentrect;
  105. // return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
  106. // // 切换上下文 Core Graphics 和 UIKit 混用
  107. // UIGraphicsPushContext(context);
  108. //
  109. // // 使用UIKit绘制内容
  110. // [image drawInRect:rect];
  111. //
  112. // // 绘制完位图后,再恢复上下文
  113. // UIGraphicsPopContext();
  114. // [super restoreFlip:context ContextHeight:flip_height];
  115. }
  116. @end