GroupDrawable.m 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. //
  2. // GroupDrawable.m
  3. // pdftest
  4. //
  5. // Created by Ray on 10/12/16.
  6. // Copyright © 2016 United Software Applications, Inc. All rights reserved.
  7. //
  8. #import "GroupDrawable.h"
  9. #import "ImageDrawable.h"
  10. #import "LineDrawable.h"
  11. #import "TextDrawable.h"
  12. #import "TableDrawable.h"
  13. @implementation GroupDrawable
  14. -(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
  15. {
  16. bool expand = [self.drawableTemplate[@"expand"] boolValue];
  17. if(!expand)
  18. {
  19. CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:y];
  20. return parentrect;
  21. }
  22. else
  23. {
  24. NSMutableDictionary* items = self.drawableTemplate[@"items"];
  25. int count = [items[@"count"] intValue];
  26. // CGRect pdfrect = /*CGRectMake(self.rect.origin.x+self.margin_left+p_rect.origin.x, self.rect.origin.y+self.margin_top+p_rect.origin.y, self.rect.size.width-self.margin_right, self.rect.size.height-self.margin_bottom);//*/[self to_pdf_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  27. CGRect parentrect =[self to_parent_rect:p_rect pos:self.rect offsetX:x offsetY:y];
  28. CGRect pdfrect = [self to_parent_rect:p_rect pos:self.rect offsetX:x offsetY:y];
  29. CGRect expand_rect=parentrect;
  30. for(int i=0;i<count;i++)
  31. {
  32. NSMutableDictionary * item =items[ [NSString stringWithFormat:@"item_%d",i ] ];
  33. // if([item[@"height"] floatValue]==-1)
  34. // item[@"height"]= [NSNumber numberWithFloat:self.rect.size.height];
  35. PDFDrawable* drawable_obj=nil;
  36. if([item[@"type"] isEqualToString:@"img"])
  37. {
  38. drawable_obj= [[ImageDrawable alloc] init:item];
  39. }
  40. else if([item[@"type"] isEqualToString:@"line"])
  41. {
  42. drawable_obj= [[LineDrawable alloc] init:item];
  43. }
  44. else if([item[@"type"] isEqualToString:@"text"])
  45. {
  46. drawable_obj= [[TextDrawable alloc] init:item];
  47. }
  48. else if([item[@"type"] isEqualToString:@"group"])
  49. {
  50. drawable_obj= [[GroupDrawable alloc] init:item];
  51. }
  52. else if([item[@"type"] isEqualToString:@"table"])
  53. {
  54. drawable_obj= [[TableDrawable alloc] init:item];
  55. }
  56. drawable_obj.delegate=self.delegate;
  57. CGRect item_rect=[drawable_obj Query_Rect:context dataSource:data ParentRect:(CGRect)pdfrect startX:0 startY:0 flipHeight:flip_height range:between_header_and_footer];
  58. if(expand)
  59. {
  60. if(item_rect.origin.y+item_rect.size.height>pdfrect.origin.y+pdfrect.size.height)
  61. {
  62. self.rect=CGRectMake(self.rect.origin.x, self.rect.origin.y, self.rect.size.width, item_rect.origin.y+item_rect.size.height-pdfrect.origin.y+self.margin_bottom+self.margin_top);
  63. expand_rect=CGRectMake(parentrect.origin.x, parentrect.origin.y, parentrect.size.width, item_rect.origin.y+item_rect.size.height-pdfrect.origin.y);
  64. }
  65. }
  66. }
  67. // [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
  68. if(expand)
  69. return expand_rect;
  70. else
  71. return parentrect;
  72. // return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
  73. // if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
  74. // [self.delegate outofPage:context];
  75. // }
  76. }
  77. }
  78. -(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
  79. {
  80. NSMutableDictionary* items = self.drawableTemplate[@"items"];
  81. int count = [items[@"count"] intValue];
  82. bool expand = [self.drawableTemplate[@"expand"] boolValue];
  83. if(expand)
  84. [self Query_Rect:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
  85. // CGRect pdfrect = /*CGRectMake(self.rect.origin.x+self.margin_left+p_rect.origin.x, self.rect.origin.y+self.margin_top+p_rect.origin.y, self.rect.size.width-self.margin_right, self.rect.size.height-self.margin_bottom);//*/[self to_pdf_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
  86. CGRect parentrect =[self to_parent_rect:p_rect pos:self.rect offsetX:x offsetY:y];
  87. CGRect pdfrect = [self to_parent_rect:p_rect pos:self.rect offsetX:x offsetY:y];
  88. CGRect expand_rect=parentrect;
  89. for(int i=0;i<count;i++)
  90. {
  91. NSMutableDictionary * item =items[ [NSString stringWithFormat:@"item_%d",i ] ];
  92. if([item[@"height"] floatValue]==-1)
  93. item[@"height"]= [NSNumber numberWithFloat:self.rect.size.height];
  94. PDFDrawable* drawable_obj=nil;
  95. if([item[@"type"] isEqualToString:@"img"])
  96. {
  97. drawable_obj= [[ImageDrawable alloc] init:item];
  98. }
  99. else if([item[@"type"] isEqualToString:@"line"])
  100. {
  101. drawable_obj= [[LineDrawable alloc] init:item];
  102. }
  103. else if([item[@"type"] isEqualToString:@"text"])
  104. {
  105. drawable_obj= [[TextDrawable alloc] init:item];
  106. }
  107. else if([item[@"type"] isEqualToString:@"group"])
  108. {
  109. drawable_obj= [[GroupDrawable alloc] init:item];
  110. }
  111. else if([item[@"type"] isEqualToString:@"table"])
  112. {
  113. drawable_obj= [[TableDrawable alloc] init:item];
  114. }
  115. drawable_obj.delegate=self.delegate;
  116. CGRect item_rect=[drawable_obj Draw:context dataSource:data ParentRect:(CGRect)pdfrect startX:0 startY:0 flipHeight:flip_height range:between_header_and_footer];
  117. if(expand)
  118. {
  119. if(item_rect.origin.y+item_rect.size.height>pdfrect.origin.y+pdfrect.size.height)
  120. {
  121. self.rect=CGRectMake(self.rect.origin.x, self.rect.origin.y, self.rect.size.width, item_rect.origin.y+item_rect.size.height-pdfrect.origin.y+self.margin_top+self.margin_bottom);
  122. expand_rect=CGRectMake(parentrect.origin.x, parentrect.origin.y, parentrect.size.width, item_rect.origin.y+item_rect.size.height-pdfrect.origin.y);
  123. }
  124. }
  125. }
  126. [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
  127. if(expand)
  128. return expand_rect;
  129. else
  130. return parentrect;
  131. // return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
  132. // if (self.delegate && [self.delegate respondsToSelector:@selector(outofPage:)]) {
  133. // [self.delegate outofPage:context];
  134. // }
  135. }
  136. @end