7

Вопрос по ios, iphone, objective-c, uiwebview, document – Поддержка Docx в UIWebview (iOS)?

Я проверил официальные ссылки для поддержки документации, и стало ясно, что docx не поддерживается в UIWebview,

https://developer.apple.com/library/ios/qa/qa1630/_index.html

Но я также узнал, что некоторые ребята смогли открыть файлы DOCX в UIWebview,

Невозможно открыть файл docx через веб-браузер в приложении, использующем функцию OpenIn, Почему doc и docx теряют информацию о стиле в iOS?, Как открыть документы Microsoft Office в iPhone

Кроме того, afaik, браузер Safari для iOS построен на основе UIWebview, и я могу открывать файлы docx из Интернета в браузере. Но когда я загружаю документ с моего тестового сервера (я перепроверил загруженный документ, импортировав его из симулятора, и он отлично открывается на моем Mac), я не могу просмотреть его в UIWebview.

Я в замешательстве, docx поддерживается или нет? Или кажется, что у docx есть еще множество форматов, которые поддерживаются?

Вот мой код загрузки,

    NSURLRequest *request = [NSURLRequest requestWithURL:urlPath];
    [webViewForDocsView loadRequest:request];

@ Шиван Рэптор, Хм .. понял твою точку зрения. Но я разрабатываю корпоративное приложение, и мне кажется, что мне нужно отправить новый запрос веб-службы для преобразования docx в doc или pdf, чтобы это сделать. В любом случае спасибо за вашу поддержку.

от BangOperator

постскриптум это работает почти для всех документов, поддерживаемых Google Drive. Кроме того, тот же метод может применяться к Android Web View

от Raptor

Умный обходной путь!

от BangOperator

У меня есть DOCX в моих предыдущих приложениях. Мое решение состоит в том, чтобы загрузить на Google Диск и открыть общедоступную ссылку на загруженный документ вUIWebView, Недостаток в том, что есть панель инструментов Google Drive.

от Raptor
2 ответа
8

Не знаю почему

но использование схемы URL для загрузки docx не сработало (код ниже не сработал)

 NSURLRequest *request = [NSURLRequest requestWithURL:urlPath];
[webViewForDocsView loadRequest:request];

Вместо этого загрузка файла в память (с использованием NSData) и загрузка данных с типом MIME работали (приведенный ниже код работал как шарм!)

NSString *path = [urlFileInView path];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];


webViewForDocsView.delegate = self;
[webViewForDocsView loadData:data MIMEType:@"application/vnd.openxmlformats-officedocument.wordprocessingml.document" textEncodingName:@"UTF-8" baseURL:nil];

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

от eselk
6

даNSString *path = [[NSBundle mainBundle] pathForResource:@&quot

даUIWebView поддерживает DOCX. Просто попытался загрузить файл DOCX из комплекта, и он, кажется, работает нормально (в этом примере с именем "DOC1.docx") ::

NSString *path = [[NSBundle mainBundle] pathForResource:@"DOC1" ofType:@"docx"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[mywebView loadRequest:request];

и если вы пытаетесь отобразить файл docx, находящийся где-то на сервере, вы можете просто загрузить его в веб-представление напрямую:

NSURL *targetURL = [NSURL URLWithString:@"http://www.central.wa.edu.au/Current_Students/JobsCareersandLeavingCentral/Documents/Resume%20Template.docx"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[mywebView loadRequest:request];

С сервера я не получаю точное местоположение URL, я получаю данные, закодированные в base64, с помощью этого я создаю файл docx в папке песочницы приложения. Таким образом, файл не находится в основном пакете ни в определенном местоположении сервера. В любом случае я получил ответ на этот вопрос.

от BangOperator

Похожие вопросы