【问题标题】:NSAttributedString dataFromRange produces docx files without any tail indentsNSAttributedString dataFromRange 生成没有任何尾缩进的 docx 文件
【发布时间】:2016-05-22 23:20:39
【问题描述】:

这是我在 NSAttributedString 类中发现的奇怪行为。根据文档,该类的对象可以产生各种类型的数据。我想将我的文本转换为 docx 现代格式。再次根据文档,我应该使用 NSOfficeOpenXMLTextDocumentType 文档属性。所以我这样做:

// produce an NSAttributedString with all of the indents have set
let stringToConvert = currentDocument.computePrintableAttributedString(forProduct: product)`

// now create a document attributes dictionary
let documentAttributes = [NSDocumentTypeDocumentAttribute : NSOfficeOpenXMLTextDocumentType]

// finally convert the string into the docx data
do {
    let convertedData = try stringToConvert.dataFromRange(fullLength, documentAttributes: documentAttributes)
} catch {
    print(error)
}

一切正常。我将数据写入文件。并在 MS Word 中打开它。一切看起来都很好......除了文档丢失了属性字符串段落样式的所有尾部缩进。

我做错了什么?如何在导出的 docx 文档中保留尾部缩进?

我已经尝试了 NSRTFTextDocumentType 属性,并且我得到了一个格式非常好的 rtf 文件,其中所有的尾部缩进都到位。

NSOfficeOpenXMLTextDocumentType 缺少什么?

【问题讨论】:

  • 也许可以提供一个文本示例(带有尾部缩进),以便可以重现该行为。

标签: swift cocoa cocoa-touch nsattributedstring


【解决方案1】:

您似乎发现了一个错误/功能。我可以使用在 OS X 10.11.4 下运行的 TextEdit 1.11 重现该行为,并且 TextEdit 在内部使用 NSAttributedString。保存为 rtf 时保留尾部缩进和首行缩进;当另存为 Word 97、2003 或 2007 时,如果在 TextEdit 中重新打开文件,则尾部缩进会丢失;如果文件在第 5 页中打开,则第一行缩进也会丢失。 LibreOffice 在读取所有三个时会丢失尾部缩进,在读取 2003 或 2007 时会丢失第一行缩进,在读取 2003 时会丢失对齐方式。在 PC 上 Word 2013 会丢失所有三个时的尾部缩进,以及读取 2007 时的第一行缩进。

建议您通过 bug report.apple.com 向 Apple 报告问题

【讨论】:

  • 我做到了,谢谢。但是,如果苹果像往常一样将它修复几年,那么解决方法是什么?也许你知道一些外部框架?
  • 对不起,我不知道任何框架,即使这样你也必须小心它没有使用操作系统进行转换。 textutil 命令行应用程序的行为如上,因此毫无疑问使用操作系统。最简单的解决方法是在 Word 中打开 rtf,看起来不错。您也许可以使用 Applescript 或 Automator 编写 Word 脚本以打开 rtf 并保存 docx。
【解决方案2】:

提交了错误报告。没有改变我的代码。在 10.11.6 更新后,一切都按预期工作。现在 NSAttributedString 在导出为 NSOfficeOpenXMLTextDocumentType 文件格式时尊重正确的缩进

更新: 原来我错了,我确实更改了一些我记得的代码。现在我知道如何使用来自 NSAttributedString 的 NSData。正如我所发现的,只有当 NSAttributedString 在其 NSParagraphStyle 中包含负尾缩进时,才会生成正确的 NSData。是的,NSAttributedString 可以在负尾缩进和正尾缩进中正常工作。但在导出到 MS Word 文档时,应确保尾部缩进为负数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多