iOS печать с изображением и текстом - PullRequest
2 голосов
/ 15 января 2012

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

-(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

Ответы [ 2 ]

1 голос
/ 25 января 2012

Я использую следующее, чтобы вставить простое изображение и текст в 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();}
1 голос
/ 15 января 2012

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

print.printingItem = imageData;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...