2016-05-22 37 views
0

這是奇怪的行爲,我在NSAttributedString類中找到。根據文檔,這個類的對象可以產生各種類型的數據。我想將我的文本轉換爲docx現代格式。再次根據文檔,我應該使用NSOfficeOpenXMLTextDocumentType文檔屬性。所以我這樣做:NSAttributedString dataFromRange生成沒有任何尾部縮進的docx文件

// 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?

+0

也許提供一個文本的示例(帶尾部縮進),以便行爲可以被複制。 –

回答

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年。

建議您向蘋果公司報告問題報告.apple.com

+0

我做了,謝謝。但是,如果蘋果像往常一樣修復它幾年,那麼解決方法是什麼?也許你知道一些外部框架? –

+0

對不起,我不知道任何框架,即使如此,你也必須小心,它沒有使用操作系統進行轉換。 'textutil'命令行應用程序的行爲如上,所以無疑使用了操作系統。最簡單的解決方法就是打開Word中的RTF,看起來很好。您可能可以使用Applescript或Automator來編寫Word腳本以打開rtf並保存docx。 – CRD

0

提交了一個錯誤報告。沒有改變我的代碼。 10.11.6更新後,所有內容都按預期工作。現在NSAttributedString出口到NSOfficeOpenXMLTextDocumentType文件格式

UPDATE時尊重右縮進:原來,我錯了,我確實改變了一些代碼,我已經記住了。現在我知道如何使用NSAttributedString中的NSData。正如我發現的,只有當NSAttributedString在其NSParagraphStyle中包含負尾縮進時,纔會生成正確的NSData。是的,NSAttributedString可以同時使用正負尾縮進。但是,當輸出到MS Word文檔中時,應確保尾部縮進是負數。