读取 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>
我需要有关读取 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>