AirPrint для неподдерживаемых форматов (.doc, .ppt, .xls и т. Д.) Работает, НО с запахом кода
Используя подсказку в этом вопросе, можно распечатать DOCX, PDF, ..., загрузив его в UIWebView
:
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
Теперь, чтобы получить filePath
Я пишу документ для печати в приложение tmp/
каталог:
NSFileManager* fileManager = [NSFileManager defaultManager];
NSString* filePath = [NSString stringWithFormat:@"%@/%@.%@", NSTemporaryDirectory(), documentName, mimeType];
[fileManager createFileAtPath:filePath contents:documentData attributes:nil];
Мне просто нужно загрузить NSData (документ) в UIWebView, чтобы распечатать его. Могу ли я получить документ filePath
напрямую(и избегать записи на диск)?
Уже пробовал [webView loadData:documentData MIMEType:mimeType textEncodingName:nil baseURL:nil];
и его вариации.
Все это:
UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
if (pic)
{
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackOpaque];
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.jobName = documentName;
pic.printInfo = printInfo;
// Apple-supported formats (.pdf & some images)
if ([UIPrintInteractionController canPrintData:documentData])
pic.printingItem = documentData;
// Apple-un-supported formats (.doc, .xls, .ppt, ...)
else
{
NSFileManager* fileManager = [NSFileManager defaultManager];
NSString* filePath = [NSString stringWithFormat:@"%@/%@.%@", NSTemporaryDirectory(), documentName, mimeType];
[fileManager createFileAtPath:filePath contents:documentData attributes:nil];
UIWebView* webView = [UIWebView new];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
pic.printFormatter = webView.viewPrintFormatter;
}
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *pic, BOOL completed, NSError *error)
{
if (!completed && error)
NSLog(@"Printing error in domain %@ with error code %u", error.domain, error.code);
};
[pic presentAnimated:YES completionHandler:completionHandler];
}