Ver Fonte

161223

update pdf drawables 
Add rectdrawable
Ray Zhang há 9 anos atrás
pai
commit
ccad4f3470

BIN
RedAnt ERP Mobile/RedAnt ERP Mobile.xcworkspace/xcuserdata/Ray.xcuserdatad/UserInterfaceState.xcuserstate


+ 68 - 3
RedAnt ERP Mobile/common/PDFUtils.m

@@ -9,6 +9,9 @@
 #import "PDFUtils.h"
 #import "PDFPage.h"
 #import "ImageDrawable.h"
+#import "TextDrawable.h"
+#import "RectDrawable.h"
+
 
 @implementation PDFUtils
 +(NSString*) addSignature :(UIImage*) img to:(NSMutableDictionary*)signatureData
@@ -129,7 +132,33 @@
     
     
 }
-
++(CGRect)WindowRect2PDFRect:(CGRect)rect pdf_rect:(CGRect)pdf_rect window_size:(CGSize)window_size
+{
+    CGRect pdf_expand;
+    float offset_x = 0;
+    float offset_y = 0;
+    float scale =1;
+    if(pdf_rect.size.height>=pdf_rect.size.width)
+    {
+        pdf_expand = CGRectMake(0, 0, pdf_rect.size.height*window_size.width/window_size.height, pdf_rect.size.height);
+        offset_x = (pdf_expand.size.width-pdf_rect.size.width)/2;
+        scale = pdf_rect.size.height/window_size.height;
+        
+    }
+    else
+    {
+        pdf_expand = CGRectMake(0, 0, pdf_rect.size.width, pdf_rect.size.width*window_size.height/window_size.width);
+        offset_y = (pdf_expand.size.height-pdf_rect.size.height)/2;
+        scale = pdf_rect.size.width/window_size.width;
+    }
+    float x=rect.origin.x*scale-offset_x;
+    float y=rect.origin.y*scale-offset_y;
+    float width = rect.size.width*scale;
+    float height = rect.size.height*scale;
+    
+    return CGRectMake(x, y, width, height);
+    
+}
 
 +(void)SavePDF:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef )document window_rect:(CGRect)window_rect
 {
@@ -178,7 +207,7 @@
     size_t page_count=CGPDFDocumentGetNumberOfPages(document);
     for(int i=1;i<=page_count;i++)
     {
-        NSMutableDictionary* page_control=controlTemplate[[NSString stringWithFormat:@"page_%d",i]];
+        NSMutableDictionary* page_control=controlTemplate[[NSString stringWithFormat:@"page_%d",i-1]];
         CGPDFPageRef page= CGPDFDocumentGetPage (document , i);
         
         CGRect papersize=CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
@@ -206,7 +235,43 @@
                 NSString* value = control[@"value"];
                 if(value.length==0)
                     continue;
-                control_drawable=[[ImageDrawable alloc] init:control_rect source_type:@"local" source:value hAlign:@"center" vAlign:@"middle"];
+                
+                
+                control_drawable=[[ImageDrawable alloc] init:[self WindowRect2PDFRect:control_rect pdf_rect:papersize window_size:window_rect.size] source_type:@"local" source:value hAlign:@"center" vAlign:@"middle"];
+            }
+            else if([control_type isEqualToString:@"TextView"])
+            {
+                NSString* value = control[@"value"];
+                if(value.length==0)
+                    continue;
+                NSString* size = control[@"size"];
+                if(size.length==0)
+                    size=@"10";
+                
+                control_drawable=[[TextDrawable alloc] init:[self WindowRect2PDFRect:control_rect pdf_rect:papersize window_size:window_rect.size] source_type:@"const" source:value textAlignment:@"center" vAlign:@"middle" size:size];
+            }
+            else if([control_type isEqualToString:@"Check"])
+            {
+                NSArray* value = control[@"value"];
+                if(value.count==0)
+                    continue;
+                NSArray* cadedate = control[@"cadedate"];
+                float marker_size = [control[@"marker_size"] floatValue];
+    
+                for(int c=0;c<value.count;c++)
+                {
+                    NSArray* marker=cadedate[[value[c] intValue]];
+                    CGRect marker_rect= CGRectMake([marker[1][0] floatValue] ,[marker[1][1] floatValue], marker_size, marker_size);
+                    PDFDrawable * marker_drawable = [[RectDrawable alloc] init:[self WindowRect2PDFRect:marker_rect pdf_rect:papersize window_size:window_rect.size] color:@"0x000000"];
+                    if(marker_drawable)
+                        [pdfPage DirectDraw:pdfContext drawable:marker_drawable];
+                }
+                
+//                NSString* size = control[@"size"];
+//                if(size.length==0)
+//                    size=@"10";
+//                
+//                control_drawable=[[TextDrawable alloc] init:[self WindowRect2PDFRect:control_rect pdf_rect:papersize window_size:window_rect.size] source_type:@"const" source:value textAlignment:@"center" vAlign:@"middle" size:size];
             }
             if(control_drawable)
                 [pdfPage DirectDraw:pdfContext drawable:control_drawable];

+ 3 - 1
RedAnt ERP Mobile/common/pdfCreator/ImageDrawable.m

@@ -21,7 +21,7 @@
         //        NSMutableDictionary* m2=[drawableTemplate mutableCopy];
         //        [self setDrawableTemplate:[[RAUtils string2dict:[RAUtils dict2string:drawableTemplate]]  mutableCopy] ];
         
-        NSMutableDictionary * drawableTemplate = [ImageDrawable createImageTemplate:rect source_type:source source:source hAlign:hAlign vAlign:vAlign];
+        NSMutableDictionary * drawableTemplate = [ImageDrawable createImageTemplate:rect source_type:source_type source:source hAlign:hAlign vAlign:vAlign];
         
         [self setDrawableTemplate:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:drawableTemplate]] ];
         
@@ -44,6 +44,8 @@
     ret[@"type"]=@"img" ;
     ret[@"source_type"]=source_type ;
     ret[@"source"]=source ;
+    ret[@"hAlign"]=hAlign ;
+    ret[@"vAlign"]=vAlign ;
     
     
     return ret;

+ 19 - 0
RedAnt ERP Mobile/common/pdfCreator/RectDrawable.h

@@ -0,0 +1,19 @@
+//
+//  RectDrawable.h
+//  AntsContract
+//
+//  Created by Ray on 12/23/16.
+//  Copyright © 2016 United Software Applications, Inc. All rights reserved.
+//
+
+#import "BasicDrawable.h"
+
+@interface RectDrawable : BasicDrawable
+
+@property (nonatomic,strong) UIColor * bgColor;
+
+
+-(instancetype) init:(CGRect) rect color:(NSString*) color;
++(NSMutableDictionary *) createRectTemplate:(CGRect) rect color:(NSString*) color;
+
+@end

+ 107 - 0
RedAnt ERP Mobile/common/pdfCreator/RectDrawable.m

@@ -0,0 +1,107 @@
+//
+//  RectDrawable.m
+//  AntsContract
+//
+//  Created by Ray on 12/23/16.
+//  Copyright © 2016 United Software Applications, Inc. All rights reserved.
+//
+
+#import "RectDrawable.h"
+
+@implementation RectDrawable
+-(instancetype) init:(CGRect) rect color:(NSString*) color
+{
+    
+    if (self = [super init]) {
+        //        NSMutableDictionary* m1=[drawableTemplate mutableCopy];
+        //        NSMutableDictionary* m2=[drawableTemplate mutableCopy];
+        //        [self setDrawableTemplate:[[RAUtils string2dict:[RAUtils dict2string:drawableTemplate]]  mutableCopy] ];
+        
+        NSMutableDictionary * drawableTemplate = [RectDrawable createRectTemplate:rect color:color];
+        
+        [self setDrawableTemplate:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:drawableTemplate]] ];
+        
+    }
+    return self;
+    
+}
++(NSMutableDictionary *) createRectTemplate:(CGRect) rect color:(NSString*) color
+{
+    
+    
+    
+    NSMutableDictionary* ret=[super createDrawableTemplate:rect];
+    
+    
+    
+    ret[@"type"]=@"rect" ;
+    ret[@"color"]=color ;
+    
+    return ret;
+}
+-(void) setDrawableTemplate:(NSMutableDictionary *)drawableTemplate
+{
+    
+    [super setDrawableTemplate:drawableTemplate];
+    
+    NSString* colorvalue=drawableTemplate[@"color"];
+    if(colorvalue.length>0 )
+    {
+        unsigned long color = strtoul([colorvalue UTF8String],0,16);
+        self.bgColor= UIColorFromRGB(color);
+    }
+    else
+    {
+        self.bgColor= [UIColor blackColor];
+        
+    }
+//    if(self.color==nil)
+//        self.hAlign=@"center";
+//    if(self.vAlign==nil)
+//        self.vAlign=@"middle";
+}
+-(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
+{
+    CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+    
+    return parentrect;
+}
+
+-(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
+{
+    //    [super flipContext:context ContextHeight:flip_height];
+    
+    
+
+    CGRect parentrect =  [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+    
+    CGRect rect= [self parent_to_pdf_rect:parentrect contextHeight:flip_height];
+        CGContextSaveGState(context);
+    
+    CGContextSetFillColorWithColor(context, self.bgColor.CGColor);
+//   CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
+//    
+//    CGContextAddRect(context, parentrect);
+    CGContextFillRect(context, rect);
+    CGContextStrokePath(context);
+
+        CGContextRestoreGState(context);
+    
+    [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
+    
+    return parentrect;
+    //    return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
+    
+    
+    //    // 切换上下文 Core Graphics 和 UIKit 混用
+    //    UIGraphicsPushContext(context);
+    //
+    //    // 使用UIKit绘制内容
+    //    [image drawInRect:rect];
+    //
+    //    // 绘制完位图后,再恢复上下文
+    //    UIGraphicsPopContext();
+    
+    //    [super restoreFlip:context ContextHeight:flip_height];
+}
+@end

+ 4 - 0
RedAnt ERP Mobile/common/pdfCreator/TextDrawable.h

@@ -20,4 +20,8 @@
 
 @property CTTextAlignment textalignment;
 
+
+
+-(instancetype) init:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source textAlignment:(NSString*)textAlignment vAlign:(NSString*)vAlign size:(NSString*)size;
++(NSMutableDictionary *) createTextTemplate:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source textAlignment:(NSString*)textAlignment vAlign:(NSString*)vAlign size:(NSString*)size;
 @end

+ 49 - 0
RedAnt ERP Mobile/common/pdfCreator/TextDrawable.m

@@ -12,6 +12,55 @@
 
 @implementation TextDrawable
 
+
+-(instancetype) init:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source textAlignment:(NSString*)textAlignment vAlign:(NSString*)vAlign size:(NSString*)size
+{
+    
+    if (self = [super init]) {
+        //        NSMutableDictionary* m1=[drawableTemplate mutableCopy];
+        //        NSMutableDictionary* m2=[drawableTemplate mutableCopy];
+        //        [self setDrawableTemplate:[[RAUtils string2dict:[RAUtils dict2string:drawableTemplate]]  mutableCopy] ];
+        
+        NSMutableDictionary * drawableTemplate = [TextDrawable createTextTemplate:rect source_type:source_type source:source textAlignment:textAlignment vAlign:vAlign size:size];
+        
+        
+        [self setDrawableTemplate:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:drawableTemplate]] ];
+        
+    }
+    return self;
+    
+}
++(NSMutableDictionary *) createTextTemplate:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source textAlignment:(NSString*)textAlignment vAlign:(NSString*)vAlign size:(NSString*)size
+{
+    
+
+    
+    
+    
+    
+    if(textAlignment.length==0)
+        textAlignment= @"Center";
+    if(vAlign.length==0)
+        vAlign= @"Middle";
+    if(size.length==0)
+        vAlign= @"10";
+
+    
+    
+    NSMutableDictionary* ret=[super createDrawableTemplate:rect];
+    
+    ret[@"type"]=@"text" ;
+    ret[@"source_type"]=source_type ;
+    ret[@"source"]=source ;
+    ret[@"text"]=source ;
+    ret[@"textAlignment"]=textAlignment ;
+    ret[@"vAlign"]=vAlign ;
+    ret[@"size"]=size ;
+    
+    return ret;
+}
+
+
 -(void) setDrawableTemplate:(NSMutableDictionary *)drawableTemplate
 {
     

+ 1 - 1
RedAnt ERP Mobile/iSales-NPD.xcodeproj/project.pbxproj

@@ -854,6 +854,7 @@
 			isa = PBXGroup;
 			children = (
 				71DF742C1C57567800F2789C /* NPD */,
+				712AFEE31DBDAEA000254965 /* PDFResource */,
 				716387C71953CDB4006E65E6 /* utils */,
 				71DF74311C5757C800F2789C /* CommonUI */,
 				718716141C433B4300F25860 /* ScanAPI */,
@@ -1036,7 +1037,6 @@
 			isa = PBXGroup;
 			children = (
 				712AFEC41DBA044C00254965 /* pdfCreator */,
-				712AFEE31DBDAEA000254965 /* PDFResource */,
 				42BED0141DAF74DF004576E0 /* JKLock */,
 				421C54FF1D81586D00CFA3B1 /* JKTimer */,
 				42E58BFF1D7E735A0092810A /* UIColor+HEX */,