2016-05-22 12 views
0

NSAttributedStringクラスで見つかった異常な動作です。ドキュメントによると、このクラスのオブジェクトはさまざまな種類のデータを生成できます。私はテキストをdocxの現代的なフォーマットに変換したい。再度docsによると、私は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を内部的に使用します。テールインデントと1行インデントの両方がrtfとして保存されると保持されます。 Word 97,2003または2007として保存すると、テキスト編集でファイルを再度開くとテールインデントが失われます。ファイルがページ5で開かれている場合、最初の行インデントも失われます。 LibreOfficeは、2003年または2007年を読むときに最初の行のインデントを、2003年を読むときに1行目をインデントすると、テールインデントが失われます。PC Word 2013では、3つすべてのテールインデントが失われ、最初の行のインデントは2007.

Appleに問題を報告するには、bug report.apple.com

+0

私は、ありがとう。しかし、アップルがいつものように2年前にそれを修正すれば、回避策は何だろうか?おそらくあなたはいくつかの外部フレームワークを知っていますか? –

+0

申し訳ありませんが、私はどのフレームワークも知らないので、変換を行うためにOSを使用しなかったので注意する必要があります。 'textutil'コマンドラインアプリは上記のように動作するので、間違いなくOSを使用します。最も簡単な回避策は、Wordでrtfを開くだけです。 ApplescriptまたはAutomatorを使ってWordをスクリプト化してrtfを開き、docxを保存することができます。 – CRD

0

バグレポートを提出してください。私のコードをちょっと変えてはいけません。 10.11.6のアップデート後、すべてが期待どおりに動作するようになりました。

UPDATE NSOfficeOpenXMLTextDocumentTypeのファイル形式にエクスポートするときに今NSAttributedStringは、右インデントを尊重:は私が間違っていたことが判明し、私が覚えているとして、いくつかのコードを変更しました。 NSAttributedStringからNSDataを操作する方法が分かりました。 NSAttributedStringのNSParagraphStyleに負のテールインデントが含まれている場合にのみ、正しいNSDataが生成されています。はい、NSAttributedStringは、負と正の両方のテールインデントで正しく機能することがあります。しかし、MS Word文書にエクスポートするときは、テールインデントが負であることを確認する必要があります。

関連する問題