Чтение или преобразование файлов Word .doc iOS - PullRequest
12 голосов
/ 22 ноября 2011

Как другие приложения на iOS могут читать и записывать документы в формате Word?Я вижу некоторые другие вопросы, связанные с этим, и принятые ответы соответствуют принципу «это невозможно сделать».Я не хочу просто отображать слово doc, я хочу прочитать его вместе с его форматированием.Как другие приложения делают это, пишут ли они сами, используя опубликованный стандарт, выпущенный Microsoft?Используют ли они какую-то встроенную утилиту для преобразования файла в какой-либо другой формат, например XML или HTML, перед его обработкой?Есть ли открытый способ сделать это?Ищу идеи.

Ответы [ 7 ]

10 голосов
/ 09 мая 2012

Я не знаю, ищите ли вы решение или вы сами его нашли, но я отвечаю на это, надеясь, что это поможет кому-то еще искать то же самое.

Я искал решение, связанное с моей задачей, в которое я хочу преобразовать файл слова в текстовый файл. Я пришел на этот вопрос после некоторого поиска в Google и, согласно ответу @TJD, перешел по ссылке и оттуда нашел эту ссылку .

Для моего требования, поскольку мне было необходимо преобразовать файл слова в текстовый файл. Я пошел по второй ссылке в качестве моего решения.

Поскольку файл docx создается с помощью Open XML File format и там упоминается, я понимаю, что мне нужно распаковать файл docx, считая его zip.

Для Zip / Unzip google предоставляет код здесь . После распаковки файла docx в нашем каталоге документов по ссылке wikipedia в корневом каталоге находятся три каталога и один файл xml.

Для своего решения я выбираю каталог word, как указано в ссылке, где находится оригинальное содержимое файла (я до сих пор не заходил ни в какой другой каталог или файл). Под вашим извлеченным путем есть файл word/doctment.xml, в котором содержимое файла docx размещено в формате xml.

В этом xml-файле доступно много тегов, и я не знаю, что означает этот текст сейчас, но после просмотра xml-файла я обнаружил, что тег, содержащий мой текст, w:t.

После этого каждая вещь похожа на торт. Я просто использовал NSXMLParser и проанализировал данные из xml-файла, нацеленного на тег w:t, и получил всю строку.

Примечание. Я обновлю свой ответ, как только узнаю о других файлах и тегах. Кроме того, это решение не работает с файлами doc, насколько я знаю, OpenXMLFile format введено в MSOffice 2007, поэтому я также обновлю свой ответ для решения doc file.

Я знаю, что этого недостаточно, чтобы не охватывать создание файла документации и т. Д. Но я надеюсь, что это поможет многим из нас.

3 голосов
/ 08 декабря 2011

"Прикол", который большинство приложений используют для чтения файлов Word, - это UIWebView - он может их читать . Это не позволяет писать документы, но это гораздо более сложная проблема, для которой я не верю, что существует простое решение.

2 голосов
/ 22 ноября 2011

Современные версии офиса используют открытый стандартный формат xml.http://en.wikipedia.org/wiki/Office_Open_XML

1 голос
/ 04 мая 2014

libOPC !

Соответствие стандарту ISO / IEC 29500, кроссплатформенное, с открытым исходным кодом, реализация на основе C99 части II (OPC) и части III (MCE)Спецификация ISO / IEC 29500 (OOXML).И это также работает для ios http://www.nooxml.com/video/libopc_iphone.wmv

1 голос
/ 26 ноября 2011

В зависимости от того, какую версию документа Word вы хотите отобразить, у вас есть несколько вариантов.

Если ваш документ действительно является файлом .doc (имеется в виду до Word 2007), то вы можете следовать спецификации для .doc двоичного формата файла (который является открытой спецификацией, которая позволяет вам использовать его свободно) для чтения / записи документов Word в этом формате.

Если документ представляет собой файл .docx, то, как указали TDJ и CodaFi , формат файла docx является открытым стандартом .

Это означает, что вы можете увидеть все подробности о том, как интерпретировать файл .docx (или любой другой файл в наборе Office 2007) и обрабатывать его в соответствии с вашими потребностями.

Это то, как современные приложения iOS могут отображать файл docx.

Обратите внимание, что не простая задача, так как в этих спецификациях много, много деталей.

1 голос
/ 22 ноября 2011

Вот как читать формат Open Office XML (OOXML) в iOS: http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2011/05/09/147049.aspx

Ссылка приведет вас к учебнику, в котором вы найдете метаданные файла OOXML, это не текст или форматирование, а начало.

.doc файлы являются проприетарным zip-форматом, содержащим много файлов, связанных с текстом и форматированием (если вы хотите увидеть, что внутри, зайдите в finder и «Get Info»; затем переименуйте расширение в .zip и распакуйте файл) , Эти файлы заполнены до предела очень большим количеством случайных символов XML, которые не нужны ни вам, ни кому-либо еще.

Однако файлы .docx можно легко открывать и конвертировать с применением стандарта OOXML. Смотрите ссылку.

0 голосов
/ 25 февраля 2014

Приведенный ниже код сохраняет файл Word .docx в каталог документов приложения при запуске. Затем он читает этот файл в UIWebView во время вашего viewDidLoad. Наконец, он ждет, пока UIWebView загрузит документ, прежде чем извлекать текст из UIWebView. Не забудьте соответствовать протоколу UIWebViewDelegate в заголовочном файле вашего контроллера представления. И, конечно же, документ Word должен быть включен в ваш проект. Обязательно добавьте документ в «Фазы сборки»> «Копировать ресурсы комплекта».

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /* WRITE WORD FILE TO DOCUMENT DIRECTORY */
    NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *path = [docsDirectory stringByAppendingPathComponent:@"Text.docx"];
    NSData *data = [NSData dataWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Text.docx"]];
    [data writeToFile:path atomically:YES];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

   /* READ WORD FILE FROM DOCUMENT DIRECTORY TO WEB VIEW */
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *wordFilePath = [documentsDirectory stringByAppendingPathComponent:@"Text.docx"];
    UIWebView *theWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    NSURL *wordFileUrl = [NSURL fileURLWithPath:wordFilePath];
    NSURLRequest *request = [NSURLRequest requestWithURL:wordFileUrl];
    [theWebView loadRequest:request];
    theWebView.delegate = self;
    [self.view addSubview:theWebView];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    /* GET TEXT FROM WEB VIEW */
    NSString *text = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.innerText"];
}
...