iOS
Tutorial AirPrint in iOS
Ricerca…
Stampa di AirPrint Banner Text
Objective-C
Aggiungere il delegato e un formattatore di testo al file ViewController.h
@interface ViewController : UIViewController <UIPrintInteractionControllerDelegate> {
UISimpleTextPrintFormatter *_textFormatter;
}
Nel file ViewController.m
definisci le seguenti costanti
#define DefaultFontSize 48
#define PaddingFactor 0.1f
La funzione che stampa il testo è la seguente: -
-(IBAction)print:(id)sender;
{
/* Get the UIPrintInteractionController, which is a shared object */
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
if(!controller){
NSLog(@"Couldn't get shared UIPrintInteractionController!");
return;
}
/* Set this object as delegate so you can use the printInteractionController:cutLengthForPaper: delegate */
controller.delegate = self;
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
/* Use landscape orientation for a banner so the text print along the long side of the paper. */
printInfo.orientation = UIPrintInfoOrientationLandscape;
printInfo.jobName = self.textField.text;
controller.printInfo = printInfo;
/* Create the UISimpleTextPrintFormatter with the text supplied by the user in the text field */
_textFormatter = [[UISimpleTextPrintFormatter alloc] initWithText:self.textField.text];
/* Set the text formatter's color and font properties based on what the user chose */
_textFormatter.color = [self chosenColor];
_textFormatter.font = [self chosenFontWithSize:DefaultFontSize];
/* Set this UISimpleTextPrintFormatter on the controller */
controller.printFormatter = _textFormatter;
/* Set up a completion handler block. If the print job has an error before spooling, this is where it's handled. */
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if(completed && error)
NSLog( @"Printing failed due to error in domain %@ with error code %lu. Localized description: %@, and failure reason: %@", error.domain, (long)error.code, error.localizedDescription, error.localizedFailureReason );
};
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
[controller presentFromRect:self.printButton.frame inView:self.view animated:YES completionHandler:completionHandler];
else
[controller presentAnimated:YES completionHandler:completionHandler]; // iPhone
}
La funzione delegato che imposta la pagina di stampa: -
- (CGFloat)printInteractionController:(UIPrintInteractionController *)printInteractionController cutLengthForPaper:(UIPrintPaper *)paper {
/* Create a font with arbitrary size so that you can calculate the approximate
font points per screen point for the height of the text. */
UIFont *font = _textFormatter.font;
CGSize size = [self.textField.text sizeWithAttributes:@{NSFontAttributeName: font}];
float approximateFontPointPerScreenPoint = font.pointSize / size.height;
/* Create a new font using a size that will fill the width of the paper */
font = [self chosenFontWithSize: paper.printableRect.size.width * approximateFontPointPerScreenPoint];
/* Calculate the height and width of the text with the final font size */
CGSize finalTextSize = [self.textField.text sizeWithAttributes:@{NSFontAttributeName: font}];
/* Set the UISimpleTextFormatter font to the font with the size calculated */
_textFormatter.font = font;
/* Calculate the margins of the roll. Roll printers may have unprintable areas
before and after the cut. We must add this to our cut length to ensure the
printable area has enough room for our text. */
CGFloat lengthOfMargins = paper.paperSize.height - paper.printableRect.size.height;
/* The cut length is the width of the text, plus margins, plus some padding */
return finalTextSize.width + lengthOfMargins + paper.printableRect.size.width * PaddingFactor;
}
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow