Sfoglia il codice sorgente

161223

update pdf drawables
Ray Zhang 9 anni fa
parent
commit
226e680075

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


+ 1 - 1
RedAnt ERP Mobile/common/PDFUtils.h

@@ -14,6 +14,6 @@
 +(CGPDFDocumentRef)OpenPDF:(NSString*) file;
 
 //+ (CGRect)scaleToSize:(CGRect )from to:(CGSize)to;
-+(void)SavePDF:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef )document;
++(void)SavePDF:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef )document window_rect:(CGRect)window_rect;
 +(NSMutableDictionary*) loadControl:(NSString*)templateName;
 @end

+ 34 - 15
RedAnt ERP Mobile/common/PDFUtils.m

@@ -8,7 +8,7 @@
 
 #import "PDFUtils.h"
 #import "PDFPage.h"
-#import "LineDrawable.h"
+#import "ImageDrawable.h"
 
 @implementation PDFUtils
 +(NSString*) addSignature :(UIImage*) img to:(NSMutableDictionary*)signatureData
@@ -131,7 +131,7 @@
 }
 
 
-+(void)SavePDF:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef )document
++(void)SavePDF:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef )document window_rect:(CGRect)window_rect
 {
     
     //获取路径
@@ -172,16 +172,17 @@
     // CGPDFCONTEXTCREATE
     
   
-    
+    CGContextRef pdfContext;
+    CGRect docsize = CGRectMake(0, 0, 100, 100);
+    pdfContext=CGPDFContextCreateWithURL(url, &docsize, nil);
     size_t page_count=CGPDFDocumentGetNumberOfPages(document);
     for(int i=1;i<=page_count;i++)
     {
-       // NSMutableDictionary* page=pages[[ NSString stringWithFormat:@"page_%d",i ] ];
-        CGPDFPageRef page= CGPDFDocumentGetPage (document , 1);
+        NSMutableDictionary* page_control=controlTemplate[[NSString stringWithFormat:@"page_%d",i]];
+        CGPDFPageRef page= CGPDFDocumentGetPage (document , i);
         
         CGRect papersize=CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
-        CGContextRef pdfContext;
-        pdfContext=CGPDFContextCreateWithURL(url, &papersize, nil);
+
         
         
         CGContextBeginPage(pdfContext, &papersize);
@@ -191,21 +192,39 @@
         [pdfPage DirectDraw:pdfContext page:page];
         
         
-        
-        NSMutableDictionary* tline1= [LineDrawable createlineTemplate:1 from:CGPointMake(20, 20) to:CGPointMake(500,500)];
-        LineDrawable* line1=nil;
-        line1= [[LineDrawable alloc] init:tline1];
-        
-        [pdfPage DirectDraw:pdfContext drawable:line1];
+        for(int j=0;j<[page_control[@"count"] intValue];j++)
+        {
+            NSMutableDictionary* control=page_control[[NSString stringWithFormat:@"control_%d",j]];
+            
+            PDFDrawable * control_drawable = nil;
+            CGRect control_rect = CGRectMake([control[@"pos_x"] floatValue], [control[@"pos_y"] floatValue], [control[@"width"] floatValue], [control[@"height"] floatValue]);
+            
+
+            NSString* control_type = control[@"type"];
+            if([control_type isEqualToString:@"Signature"])
+            {
+                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"];
+            }
+            if(control_drawable)
+                [pdfPage DirectDraw:pdfContext drawable:control_drawable];
+        }
+//        NSMutableDictionary* tline1= [LineDrawable createlineTemplate:1 from:CGPointMake(20, 20) to:CGPointMake(500,500)];
+//        LineDrawable* line1=nil;
+//        line1= [[LineDrawable alloc] init:tline1];
+//        
+//        [pdfPage DirectDraw:pdfContext drawable:line1];
 //                NSRange range = NSMakeRange(0,9999);
 //        [line1 Draw:pdfContext dataSource:nil ParentRect:papersize startX:0 startY:0 flipHeight:0 range:range];
         
          CGContextEndPage(pdfContext);
-         CGContextRelease(pdfContext);
+
        // [pdfPage Draw:pdfContext dataSource:nil];
 //        [self drawPage:pdfContext template:page size:papersize dataSource:data];
     }
-    
+    CGContextRelease(pdfContext);
     CFBridgingRelease(url);
 //    //开始画pdf
 //    

+ 2 - 1
RedAnt ERP Mobile/common/pdfCreator/ImageDrawable.h

@@ -9,5 +9,6 @@
 #import "BasicDrawable.h"
 
 @interface ImageDrawable : BasicDrawable
-
+-(instancetype) init:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source hAlign:(NSString*)hAlign vAlign:(NSString*)vAlign;
++(NSMutableDictionary *) createImageTemplate:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source hAlign:(NSString*)hAlign vAlign:(NSString*)vAlign;
 @end

+ 41 - 0
RedAnt ERP Mobile/common/pdfCreator/ImageDrawable.m

@@ -12,6 +12,42 @@
 
 @implementation ImageDrawable
 
+
+-(instancetype) init:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source hAlign:(NSString*)hAlign vAlign:(NSString*)vAlign
+{
+    
+    if (self = [super init]) {
+        //        NSMutableDictionary* m1=[drawableTemplate mutableCopy];
+        //        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];
+        
+        [self setDrawableTemplate:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:drawableTemplate]] ];
+        
+    }
+    return self;
+    
+}
++(NSMutableDictionary *) createImageTemplate:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source hAlign:(NSString*)hAlign vAlign:(NSString*)vAlign
+{
+
+    
+    if(hAlign.length==0)
+        hAlign= @"Center";
+    if(vAlign.length==0)
+        vAlign= @"Middle";
+    
+    
+    NSMutableDictionary* ret=[super createDrawableTemplate:rect];
+    
+    ret[@"type"]=@"img" ;
+    ret[@"source_type"]=source_type ;
+    ret[@"source"]=source ;
+    
+    
+    return ret;
+}
 -(void) setDrawableTemplate:(NSMutableDictionary *)drawableTemplate
 {
     
@@ -40,6 +76,11 @@
     {
         image= [UIImage imageNamed:self.drawableTemplate[@"source"]];
         
+    }
+    else if([source isEqualToString:@"local"])
+    {
+        image= [UIImage imageWithContentsOfFile:self.drawableTemplate[@"source"]];
+        
     }
     else if([source isEqualToString:@"data"])
 

+ 3 - 0
RedAnt ERP Mobile/common/pdfCreator/PDFDrawable.h

@@ -47,6 +47,9 @@
 
 -(CGRect)to_pdf_rect:(CGRect)parentRect pos:(CGRect)rect contextHeight:(double) height;
 -(CGPoint)to_pdf_point:(CGRect)parentRect point:(CGPoint)p contextHeight:(double) height;
++(NSMutableDictionary *) createDrawableTemplate:(CGRect) rect;
+
 
 -(void) DrawBound:(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;
+
 @end

+ 12 - 0
RedAnt ERP Mobile/common/pdfCreator/PDFDrawable.m

@@ -13,6 +13,18 @@
 
 
 @implementation PDFDrawable
++(NSMutableDictionary *) createDrawableTemplate:(CGRect) rect
+{
+    NSMutableDictionary* ret=[[NSMutableDictionary alloc]init];
+    
+    ret[@"x"]=[NSNumber numberWithDouble:rect.origin.x] ;
+    ret[@"y"]=[NSNumber numberWithDouble:rect.origin.y] ;
+    ret[@"width"]=[NSNumber numberWithDouble:rect.size.width] ;
+    ret[@"height"]=[NSNumber numberWithDouble:rect.size.height] ;
+    
+    return ret;
+}
+
 -(instancetype) init:(NSMutableDictionary *)drawableTemplate
 {
     

+ 2 - 1
RedAnt ERP Mobile/common/pdfCreator/PDFPage.m

@@ -141,7 +141,8 @@
 {
     
     
-    
+    if(drawable_obj==nil)
+        return;
     
 //    self.data=data;
 //