www.www.zaachi.com »  Blog/Vývoj pro iPhone  »  iPhone - tisk z iPhone

iPhone - tisk z iPhone



Z aplikace napsané pro iPhone nebo jiné podobné zařízení lze snadno tisknout dokumenty na lokálních tiskárnách.

 

Reklama

Pokud mě chcete podpořit a jste milovník jedné stopy, navštivte můj projekt: MotoArena.cz

Vytvoření tiskového dialogu

Pro vytvoření dialogu pro tisk použijeme komponentu UIPrintInteractionController, kterou můžeme standartně navázat na událost například kliknutí na tlačítko.
UIPrintInteractionController si sám vytváří interface pro tisk, včetně tiskového dialogu.

Můžeme si tedy vytvořit akci:

- (IBAction)printPage:(id)sender{
	UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
}

Po vytvoření controlleru bychom měli provést kontrolu, zda systém samotný k němu má přístup, můžeme provést standartně:

if(!controller){
    NSLog(@"Couldn't get shared UIPrintInteractionController!");
    return;
}

Tím zjistíme, zda je možné UIPrintInteractionController použít a pokud ne, můžeme případ ošetřit.

V případě že je vše vpořádku, vytvoříme tiskový handler:

void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
	^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
    if(!completed && error){
        NSLog(@"FAILED! due to error in domain %@ with error code %u",
        error.domain, error.code);
    }
};

který je obsahem funkce pro vyovolanou událost.

Pro nastavení tisku máme k dispozici UIPrintInfo, ve kterém můžeme nastavovat vlastnosti tisku, uspořádání tisku, atp.

Můžeme jej nastavit pomocí [controller setPrintInfo:<#(UIPrintInfo *)#>], takže v našem kódu například:

UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = @"job_name";
printInfo.duplex = UIPrintInfoDuplexLongEdge;
controller.printInfo = printInfo;
controller.showsPageRange = YES;

Vlastností které můžeme nastavovat je spousta, stačí mrknout do dokumentace.

PrintFormater

Pro samotný tisk si vytvoříme PrintFormater, který bude vytvářet strukturu, kterou tiskneme. V tomto případě si můžeme například vytvořit HTML kód, který se bude posílat na tiskárnu, aby bylo vidět možnosti tisku:

UIMarkupTextPrintFormatter *htmlFormater = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:
			[self getPrintString]];

Do formateru předáváme text, který se bude zpracovávat, a který se bude zobrazovat na výstupu. V tomto případě pro testovací účely jsem vytvořil funkci, která text vrací:

- (NSString *)getPrintString{
	NSString *text = @"";
	for (int i = 0; i < 400; i++) {
		text = [NSString stringWithFormat:@"%@text line<br />", text];
	}

	return text;
}

Funkce vrací 400 řádků textu, která se bude tisknout.
Do našeho controlleru jej předáme pomocí:

controller.printFormatter = htmlFormater;

Printing handler

Celý handler pro tisk může tedy vypadat následovně, podle našeho vytvořeného příkladu:

- (NSString *)getPrintString{
	NSString *text = @"";
	for (int i = 0; i < 400; i++) {
		text = [NSString stringWithFormat:@"%@text line<br />", text];
	}

	return text;
}

- (IBAction)printPage:(id)sender{
	UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];

    if(!controller){
        NSLog(@"Couldn't get shared UIPrintInteractionController!");
        return;
    }

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
	^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
        if(!completed && error){
            NSLog(@"FAILED! due to error in domain %@ with error code %u",
				  error.domain, error.code);
        }
    };

	UIPrintInfo *printInfo = [UIPrintInfo printInfo];
	printInfo.outputType = UIPrintInfoOutputGeneral;
	printInfo.jobName = @"job_name";
	printInfo.duplex = UIPrintInfoDuplexLongEdge;
	controller.printInfo = printInfo;
	controller.showsPageRange = YES;

	UIMarkupTextPrintFormatter *htmlFormater = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:
												[self getPrintString]];
	controller.printFormatter = htmlFormater;

	[controller presentAnimated:YES completionHandler:completionHandler];
}

Spuštění iPhone printer simulator

Abychom mohli správně testovat tisk, budeme potřebovat tisk simulovat v prostředí, ve kterém vyvýjíme. Stejně tak budeme potřebovat vyzkoušet jak tisk vypadá a zda probíhá správně. Pro tyto účely si spustíme aplikaci Printer Simulator, kterou najdeme v:

/Developer/Platforms/iPhoneOS.platform/Developer/Applications/

Po spuštění se nám zobrazí dialogové okno:

dialog window

Tisk z iPhone

Samotný tisk a jeho dialogová okna potom budou vypadat následovně:

img

Tiskový dialog, který se otevře po kliknutí na tisk

img

Výběr tiskáren, které jsou lokálně k dispozici.

img

Výběr stránek, které budou pro tisk použity.

img

Vytištěný dokument a dialog pro tisknutí. Z dialogu je možné se vrátit zpět.

 

 


linkuj topclanky
Komentáře (0)

Autor: Zaachi
Publikováno: 30.9.2011 20:48:22


Mohlo by vás zajímat:
Vývoj aplikací pro iPhone: použití SqLite v iPhone
iPhone web app
Lokální software pro iPhone 3G
Top Free aplikace pro iPhone 3G
TOPLIST.cz
rss coments img img img