Cách tạo ra một file PDF

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 114 - 126)

5.9 Report Form

5.9.1 Cách tạo ra một file PDF

Bước 1:Ta viết một đoạn code để chương trình mở ra một vùng dữ liệu lưu file PDF:

Ta có thể thay đổi tên của file PDF bằng cách thay đổi nội dung biến fileName.

Bước 2: Bắt đầu viết chữ và vẽ đường thẳng trên file PDF vừa tạo:

 Mở một trang mới trong file PDF:

UIGraphicsBeginPDFContextToFile(filePath, CGRectZero, nil);

UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);

NSString *fileName=[NSString

stringWithFormat:@"%@.PDF",txt_PDFPrint.text];

NSArray

*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentDirectory=[Path objectAtIndex:0];

NSString *pdfPathWithFileName=[documentDirectory stringByAppendingPathComponent:fileName]; } else{ continue; } } stringByAppendingPathComponent:databaseName];

[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];

Page 105  Quy định frame của chữ mà ta muốn viết lên file PDF:

CGRect nameReport=CGRectMake(0,0,150,50);

NSString *nameRpt=[NSString

stringWithFormat:@"%@",txt_ReportName.text];

 Quy định điểm bắt đầu và kết thúc của đường thẳng: CGPoint from = CGPointMake(0, 120);

CGPoint to = CGPointMake(612, 120);

 Hàm giúp ta viết chữ lên file PDF:

Trong đó các thông số đưa vào như sau:

(NSString*)textToDraw inFrame: Đoạn text mà ta muốn ghi vào file PDF. (CGRect)frameRect: Vị trí xuất hiện hay là Frame của đoạn text.

(CGFloat) sizeofFont: Kích cỡ của kiểu chữ mà ta viết. (UIColor *) textColor: Màu của chữ.

-(void)drawText:(NSString*)textToDraw inFrame:(CGRect)frameRect fontSize:(CGFloat) sizeofFont color:(UIColor *) textColor{

CGContextRef context=UIGraphicsGetCurrentContext(); UIFont *font= [UIFont systemFontOfSize:sizeofFont];

CGContextSetFillColorWithColor(context, textColor.CGColor);

CGRect textRect=CGRectMake(frameRect.size.width, frameRect.size.height,612,

792);

NSString *myString=[NSString stringWithFormat:@"%@",textToDraw]; [myString drawInRect:textRect withFont:font

lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentLeft]; }

Page 106

Ví dụ ta muốn viết chữ HelloWord: NSString *name=@"HelloWorld";

[self drawText2:name inFrame:nameRect1 fontSize:13 color:[UIColor blackColor]];

Page 107  Hàm giúp ta vẽ đường thẳng:

Đối số đưa vào hàm là :

(CGPoint)from: tọa độ điểm đầu. (CGPoint)to: tọa độ điểm cuối.

Ví dụ ta muốn vẽ đường thẳng nối 2 điểm tọa độ A(0,0), B(200,300) trên file PDF: CGPoint from = CGPointMake(0, 120);

CGPoint to = CGPointMake(612, 120); [self drawLineFromPoint:from toPoint:to];

-(void)drawLineFromPoint:(CGPoint)from toPoint:(CGPoint)to {

CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context, 2.0);

CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); CGFloat components[] = {0.2, 0.2, 0.2, 0.3};

CGColorRef color = CGColorCreate(colorspace, components); CGContextSetStrokeColorWithColor(context, color);

CGContextMoveToPoint(context, from.x, from.y); CGContextAddLineToPoint(context, to.x, to.y); CGContextStrokePath(context);

CGColorSpaceRelease(colorspace); CGColorRelease(color);

Page 108

Hình 5-54 Kết quả vẽ đường thẳng lên file PDF

Page 109

-(void)drawTableAt:(CGPoint)origin withRowHeight:(int)rowHeight andColumnWidth:(int)columnWidth andRowCount:(int)numberOfRows andColumnCount:(int)numberOfColumns {

for (int i = 0; i <= numberOfRows; i++) {

int newOrigin = origin.y + (rowHeight*i);

CGPoint from = CGPointMake(origin.x, newOrigin);

CGPoint to = CGPointMake(origin.x + (numberOfColumns*columnWidth), newOrigin);

[self drawLineFromPoint:from toPoint:to]; }

for (int i = 0; i <= numberOfColumns; i++) {

int newOrigin = origin.x + (columnWidth*i);

CGPoint from = CGPointMake(newOrigin, origin.y); CGPoint to = CGPointMake(newOrigin, origin.y +(numberOfRows*rowHeight));

[self drawLineFromPoint:from toPoint:to]; }

}

CGColorSpaceRelease(colorspace); CGColorRelease(color);

Page 110  Các thông số đưa vào:

(CGPoint)origin: Tọa độ x,y đưa vào. (int)rowHeight: Chiều cao của mỗi hàng (int)columnWidth: Chiều rộng mỗi cột.

(int)numberOfRows: Số lượng hàng trong Table. (int)numberOfColumns: Số lượng cột trong Table Ví dụ ta muốn vẽ một Table 7 hàng 4 cột : int xOriginColumn = 50; int yOriginColumn = 300; int rowHeightColumn = 50; int columnWidthColumn = 120; int numberOfRows = 7; int numberOfColumns =4;

[self drawTableAt:CGPointMake(xOrigin, yOrigin) withRowHeight:rowHeight andColumnWidth:columnWidth andRowCount:numberOfRows

Page 111

Hình 5-55 Kết quả vẽ Table lên file PDF

 Cách tạo BackGound cho file text.

Cách 1: Tạo màu cho Backgound. Ta sử dụng đoạn Code sau:

Page 112

Hàm CGContextSetFillColorWithColor(context, [[UIColor greenColor] CGColor]) giúp ta chỉnh mày cho BackGound, ví dụng như ta đang để mày xanh.

Cách 2: Đưa một ảnh vào BackGround. Ta sử dụng đoạn Code sau:

Trong đó UIImage chính là file ảnh mà ta muốn làm BackGround.

Bước 3: Lấy dữ liệu từ SQLite để xuất ra report theo yêu cầu người dùng:

Đầu tiên ta sẽ mở file SQL bằng Code sau -(void) drawImageBackground { CGRect imageRect=CGRectMake(0,120, 612, 672); UIImage *image=myImageBG.image; [image drawInRect:imageRect]; } -(void)drawBackGround { CGContextRef context=UIGraphicsGetCurrentContext();

CGRect rect=CGRectMake(0, 0, pageSize.width, pageSize.height);

CGContextSetFillColorWithColor(context, [[UIColor greenColor] CGColor]); CGContextFillRect(context, rect);

}

CGColorSpaceRelease(colorspace); CGColorRelease(color);

Page 113

Sau đó ta đọc dữ liệu từ file SQL và lưu vào trong mảng

Dữ liệu được lưu vào mảng, chúng ta sẽ xử lý các mảng này để xuất ra được file PDF. Chương trình sẽ cho người dùng tùy chọn số lượng biến muốn xuất ra ví dụ 2,3,4, từ đó sẽ xuất ra 1 Table tương ứng.

NSString *Name = [[NSString alloc] initWithUTF8String:(const char*)sqlite3_column_text(statement, 2)];

NSString *Address = [[NSString alloc] initWithUTF8String:(const char*)sqlite3_column_text(statement, 3)]

[NameTagArray addObject:Name]; [AddressTagArray addObject:Address];

if(sqlite3_open(dbpath, &contactDB)==SQLITE_OK){ //mo du lieu tu sqlite sqlite3_stmt *statement;

NSString *sql = @"SELECT * FROM Task"; constchar *query_stmt = [sql UTF8String];

if(sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement,

NULL)==SQLITE_OK){

while(sqlite3_step(statement)==SQLITE_ROW){ //chay tung dong }

sqlite3_finalize(statement); }

Page 114

Hình 5-56 File PDF chưa có Background

Ta muốn thay đổi Background thì có thể lên Internet chọn đường link 1 tấm ảnh ví dụ như:

http://hd.wallpaperswide.com/thumbs/blue_and_white-t2.jpg.

Sau đó nhấn nút OK thì ta sẽ thấy đường hình ảnh mà ta vừa lấy về, sau đó nếu nhấn nút Print PDF File thì hình ảnh đó sẽ được làm background như hình bên dưới.

Page 115

Page 116

CHƯƠNG 6 XML

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 114 - 126)

Tải bản đầy đủ (PDF)

(145 trang)