使用AirPrint打印UIImage会导致截止内容

0xS*_*ina 6 cocoa-touch objective-c ios airprint

我正在打印UIImage使用AirPrint,但边距不正确.这是打印时的样子:
打印输出的照片

有没有办法让它完美贴合在纸上?

这是所要求的代码:

    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    //pic.delegate = del;

    UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    printInfo.outputType = UIPrintInfoOutputGeneral;
    printInfo.jobName = [NSString stringWithFormat:@"New Ticket"];
    pic.printInfo = printInfo;


    pic.printingItem = [UIImage imageWithContentsOfFile:path];

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
        if (!completed && error) {
            UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error." 
                                                   message:[NSString stringWithFormat:@"An error occured while printing: %@", error]
                                                  delegate:nil 
                                         cancelButtonTitle:@"OK" 
                                         otherButtonTitles:nil, nil];

            [av show];
            [av release];
        }
    };

    [pic presentAnimated:YES completionHandler:completionHandler];
Run Code Online (Sandbox Code Playgroud)

Ale*_*hol 0

最好的选择可能是将图像缩小到打印图像的比例,这样您就可以看到页面上的整个内容。

有多种方法可以做到这一点,所以我只告诉你我会这样做的方法。我维护一个名为ANImageBitmapRep的类,它具有几种不同类型的图像缩放。您想要的缩放类型会保留整个图像,但将其置于特定大小的矩形内部的中心。首先,您必须将 ANImageBitmapRep 源文件添加到您的项目中,并 #import ANImageBitmapRep.h

#import "ANImageBitmapRep.h"
Run Code Online (Sandbox Code Playgroud)

然后,像这样缩放图像:

pic.printingItem = [[UIImage imageWithContentsOfFile:path] imageFittingFrame:CGSizeMake(478, 640)];
Run Code Online (Sandbox Code Playgroud)

您可以将 更改CGSizeMake(x, y)为您想要的任何内容,以调整缩放图像的比例和分辨率。