Считать содержимое файла DOC (.docx или .doc) и преобразовать его в строку - PullRequest
0 голосов
/ 13 мая 2018

Мне нужна помощь для чтения содержимого файла DOC (.docx или .doc) и отображения его внутри UILabel.Файл взят из URL, поэтому я загружаю файл в DocumentsDirectory и в процессе поиска решения для чтения содержимого.

Я использую Alamofire.download, и я позвонил:

let content = try? String(contentsOfFile: (response.destinationURL?.path)!, encoding: String.Encoding.utf8)

, но возвращается nil

Кто-нибудь знает, как читать содержимое документа?файл будет оценен.

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете использовать это SNDocx ​​

ИЛИ

Это не так просто, как вы себе представляете, файл docx представляет собой сжатую коллекцию XML и других файлов.,Вы не можете загрузить файл docx в String.Вам нужно будет использовать Data для загрузки содержимого zip.Тогда вам понадобится unzip.Затем вам нужно будет просмотреть все файлы и найти нужный word/document.xml, затем прочитать xml и разобрать.

Я использую Zippy

Посмотрите этот код

 guard let originalFileURL = Bundle.main.url(forResource: "test", withExtension: "docx") else {
            print("file not found :( ")
            return
        }
     do{

           let filename = try! ZipFile.init(url: originalFileURL)
            // file name  content 
            //            - 0 : "[Content_Types].xml"
            //            - 1 : "word/numbering.xml"
            //            - 2 : "_rels/.rels"
            //            - 3 : "word/theme/theme1.xml"
            //            - 4 : "word/fontTable.xml"
            //            - 5 : "word/document.xml"
            //            - 6 : "word/settings.xml"
            //            - 7 : "word/styles.xml"
            //            - 8 : "word/_rels/document.xml.rels"

            for file in filename {
                if file.contains("document.xml"){
                    let data = filename[file]
                    print(String.init(data: data!, encoding: String.Encoding.utf8))
                }
            }

        }catch{
            print(error)
        }

Вывод

<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r<w:document xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:sl=\"http://schemas.openxmlformats.org/schemaLibrary/2006/main\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\" xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:lc=\"http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas\" xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\"><w:body><w:p w:rsidR=\"00000000\" w:rsidDel=\"00000000\" w:rsidP=\"00000000\" w:rsidRDefault=\"00000000\" w:rsidRPr=\"00000000\" w14:paraId=\"00000000\"><w:pPr><w:contextualSpacing w:val=\"0\"/><w:rPr/></w:pPr><w:r w:rsidDel=\"00000000\" w:rsidR=\"00000000\" w:rsidRPr=\"00000000\"><w:rPr><w:rtl w:val=\"0\"/></w:rPr><w:t xml:space=\"preserve\">test</w:t></w:r></w:p><w:sectPr><w:pgSz w:h=\"15840\" w:w=\"12240\"/><w:pgMar w:bottom=\"1440\" w:top=\"1440\" w:left=\"1440\" w:right=\"1440\" w:header=\"0\"/><w:pgNumType w:start=\"1\"/></w:sectPr></w:body></w:document>

Вы должны проанализировать xml это, и вы увидите в моем выводе, чтоон должен анализироваться до получения этого значения

<w:t xml:space=\"preserve\">test</w:t>

docx Справочник по формату XML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...