2012-01-14 2 views
2

Я пытаюсь напечатать изображение и некоторый текст над ним. Когда я печатаю изображение, оно занимает всю страницу. Я хочу только его в центре и 320 х 480 пикселей. Кто-то сказал мне, что мне нужно использовать исправления, но я не знаю, как это сделать. Код ниже - это то, что у меня есть до сих пор, оно просто печатает изображение, но оно не имеет ограничений по размеру. Спасибо.iOS Печать с изображением и текстом

-(void)sendToPrinter{ 
UIPrintInteractionController *print = [UIPrintInteractionController sharedPrintController]; 

if(!print){ 

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Print Unavailable!" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    return; 
} 


pageSize = print.printPaper.paperSize; 
pageSize = CGSizeMake(print.printFormatter.printPageRenderer.printableRect.size.width, print.printFormatter.printPageRenderer.printableRect.size.height); 



NSUserDefaults *data = [NSUserDefaults standardUserDefaults]; 
NSString *projectTitle = [data stringForKey:@"pName1"]; 
NSString *fileName = [NSString stringWithFormat:@"%@.pdf", projectTitle]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName]; 


NSData *finalImageData = [NSData dataWithContentsOfFile:pdfFileName]; 


print.delegate = self; 
UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
printInfo.outputType = UIPrintInfoOutputGeneral; 
printInfo.jobName = [[(PageView *)[self view] representedPage] title]; 
printInfo.duplex = UIPrintInfoDuplexLongEdge; 
print.printInfo = printInfo; 
print.showsPageRange = YES; 
print.printingItem = finalImageData; 
UIViewPrintFormatter *viewFormatter = [self.view viewPrintFormatter]; 
viewFormatter.startPage = 0; 

print.printFormatter = viewFormatter; 

UIPrintInteractionCompletionHandler completionHandler = ^(UIPrintInteractionController *printInteractionController, BOOL completed, NSError *error) { 
    if(!completed && error){ 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Print Unavailable!" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } 
}; 

[print presentAnimated:YES completionHandler:completionHandler]; 

} 
- (void) drawText{ 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
CGContextSetRGBFillColor(currentContext, 0.0, 0.0, 0.0, 1.0); 

NSString *textToDraw = @"Lorem ipsum "; 


UIFont *font = [UIFont systemFontOfSize:14.0]; 

CGSize stringSize = [textToDraw sizeWithFont:font 
          constrainedToSize:CGSizeMake(pageSize.width - 2*kBorderInset-2*kMarginInset, pageSize.height - 2*kBorderInset - 2*kMarginInset) 
           lineBreakMode:UILineBreakModeWordWrap]; 

CGRect renderingRect = CGRectMake(kBorderInset + kMarginInset, kBorderInset + kMarginInset + 350.0, pageSize.width - 2*kBorderInset - 2*kMarginInset, stringSize.height); 

[textToDraw drawInRect:renderingRect 
       withFont:font 
     lineBreakMode:UILineBreakModeWordWrap 
      alignment:UITextAlignmentLeft]; 
} 

- (void) drawImage{ 

//paint chart 

UIImage* chartImage = [self getUIImageScreenShot];; 

[chartImage drawInRect:CGRectMake((pageSize.width - chartImage.size.width/2)/2, 70, chartImage.size.width/2, chartImage.size.height/2)]; 
//[chartImage drawInRect:CGRectMake((pageSize.width - chartImage.size.width/2)/2, 70, chartImage.size.width/2, chartImage.size.height/2)];} 

} 
- (void) generatePdfWithFilePath: (NSString *)thefilePath{ 
UIGraphicsBeginPDFContextToFile(thefilePath, CGRectZero, nil); 

//NSInteger currentPage = 0; 
BOOL done = NO; 
do 
{ 
    //Start a new page. 
    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil); 


    //Draw some text for the page. 
    [self drawText]; 

    //Draw an image 
    [self drawImage]; 

    done = YES; 
} 
while (!done); 

// Close the PDF context and write the contents out. 
UIGraphicsEndPDFContext();} 

enter image description here

ответ

1

кажется, вы только добавляя изображение к элементу печати

print.printingItem = imageData; 

вы пытались создать всю «картину» того, что вы хотите распечатать (включая текст и прочее) и отправив его на принтер?

+0

Я не знаю, как к чему мне нужна помощь. – BDGapps

1

Я использую следующие для вставки простого изображения в и текст в PDF, может направить вас в правильном направлении

- (IBAction)generatePdfButtonPressed:(id)sender{ 
pageSize = CGSizeMake(612, 792); 

NSUserDefaults *data = [NSUserDefaults standardUserDefaults]; 
NSString *projectTitle = [data stringForKey:@"pName1"]; 
NSString *fileName = [NSString stringWithFormat:@"%@.pdf", projectTitle]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName]; 

[self generatePdfWithFilePath:pdfFileName];} 

, а затем ...

- (void) drawText{ 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
CGContextSetRGBFillColor(currentContext, 0.0, 0.0, 0.0, 1.0); 

NSString *textToDraw = @"Lorem ipsum "; 


UIFont *font = [UIFont systemFontOfSize:14.0]; 

CGSize stringSize = [textToDraw sizeWithFont:font 
          constrainedToSize:CGSizeMake(pageSize.width - 2*kBorderInset-2*kMarginInset, pageSize.height - 2*kBorderInset - 2*kMarginInset) 
           lineBreakMode:UILineBreakModeWordWrap]; 

CGRect renderingRect = CGRectMake(kBorderInset + kMarginInset, kBorderInset + kMarginInset + 350.0, pageSize.width - 2*kBorderInset - 2*kMarginInset, stringSize.height); 

[textToDraw drawInRect:renderingRect 
       withFont:font 
     lineBreakMode:UILineBreakModeWordWrap 
      alignment:UITextAlignmentLeft]; 
} 

- (void) drawImage{ 

//paint chart 
NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"chartImageP1"]; 
UIImage* chartImage = [UIImage imageWithData:imageData]; 

[chartImageBack drawInRect:CGRectMake((pageSize.width - chartImageBack.size.width/2)/2, 70, chartImageBack.size.width/2, chartImageBack.size.height/2)]; 
[chartImage drawInRect:CGRectMake((pageSize.width - chartImage.size.width/2)/2, 70, chartImage.size.width/2, chartImage.size.height/2)];} 

- (void) generatePdfWithFilePath: (NSString *)thefilePath{ 
UIGraphicsBeginPDFContextToFile(thefilePath, CGRectZero, nil); 

NSInteger currentPage = 0; 
BOOL done = NO; 
do 
{ 
    //Start a new page. 
    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil); 


    //Draw some text for the page. 
    [self drawText]; 

    //Draw an image 
    [self drawImage]; 

    done = YES; 
} 
while (!done); 

// Close the PDF context and write the contents out. 
UIGraphicsEndPDFContext();} 
+0

Это очень помогает! Если вы можете сделать это, чтобы добавить текст в окончательные nsdata, тогда ваш ответ будет работать !!!! – BDGapps

+0

Текст, назовите мой ответ в этом сообщении [ссылка] (http://stackoverflow.com/questions/8940725/draw-text-from-uitextview-to-pdf-as-it-is/8997636#8997636) – Dan

+0

Хорошо, но теперь, как я могу получить 2 исправления, а не страницу ??? – BDGapps

Смежные вопросы