读取 DOC(.docx 或 .doc)文件的内容并将其转换为字符串

Read contents of a DOC (.docx or .doc) file and convert it to String

我需要有关读取 DOC(.docx 或 .doc)文件内容并将其显示在 UILabel 中的帮助。该文件来自URL,所以我将文件下载到DocumentsDirectory,并在寻找解决方案的过程中读取了内容。

我正在使用 Alamofire.download 并且我打过电话:

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

但它正在返回 nil

有谁知道如何阅读 doc 文件的内容,将不胜感激。

你可以使用这个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 Format reference