2016-08-03 11 views
-8

SwiftアプリケーションでWord文書を作成しようとしています。特定のフォントのプレーンテキストの一部を.docxというファイルとして保存します。私は単語文書を作成する方法を見つけられませんでしたが、私の最高の推測は、テキスト文書を "Hello World"というテキストだけでXcodeプロジェクトにインポートしてから、 "Hello" 「世界」に必要なテキストを入力します。Word文書を作成するSwift

私の迅速なプロジェクトで.docxファイルのテキストを変更するにはどうすればよいですか?

.docxファイルを作成して、どのような種類のテキストでもGoogleドキュメントアプリやページアプリにエクスポートできるようにしたいと思います。既存ドキュメントをエクスポートするにはUIDocumentInteractionControllerの使用法を理解していますが、Word文書にテキストを書き込んで保存する方法を理解する必要があります。

+3

この質問は広すぎるため、スタックオーバーフローにはあまり適していません。まだ閉鎖されていない唯一の理由は、奨励金が付いているからです。 – JAL

+1

誰かがそれに賞金を加えたら、閉鎖のために貧弱な投稿にフラグを立てることはできません。 –

答えて

2

残念ながら、彼らが(あなたが彼らの内部構造を明らかにするれ、.zipに古い.docxファイルのファイル拡張子を変更することにより、自分で見ることができます)どのように複雑な与えられ、スウィフトで.docxファイルを作成することはほぼ不可能です。次善策は単に.txtファイルを作成することです。このファイルもPagesに開くことができます(ただし悲しいことにDocsはありません)。書式設定や画像を使用してさらに洗練された書式を探している場合は、.pdfファイルを作成することもできます。

作成とスウィフト3に.txtファイルを共有する:

func export(_ string: String, title: String) throws { 
    // create a file path in a temporary directory 
    let fileName = "\(title).txt" 
    let filePath = (NSTemporaryDirectory() as NSString).appendingPathComponent(fileName) 

    // save the string to the file 
    try string.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8) 

    // open share dialog 

     // Initialize Document Interaction Controller 
    self.interactionController = UIDocumentInteractionController(url: URL(fileURLWithPath: filePath)) 
     // Configure Document Interaction Controller 
     self.interactionController!.delegate = self 
     // Present Open In Menu 
    self.interactionController!.presentOptionsMenu(from: yourexportbarbuttonoutlet, animated: true) // create an outlet from an Export bar button outlet, then use it as the `from` argument 
} 

これは

export("Hello World", title: "HelloWorld") 
で呼び出すことができます。ここ


は助けになるかもしれないいくつかのコードサンプルです

すぐに作成するtxtファイルを開き、共有ダイアログを開きます。これは即座にPDFファイルを作成して開くこと

openPDF("Hello World", title: "HelloWorld") 

で呼び出すことができます

func openPDF(_ string: String, title: String) throws { 
    // 1. Create a print formatter 

    let html = "<h2>\(title)</h2><br><h4>\(string)</h4>" // create some text as the body of the PDF with html. 

    let fmt = UIMarkupTextPrintFormatter(markupText: html) 

    // 2. Assign print formatter to UIPrintPageRenderer 

    let render = UIPrintPageRenderer() 
    render.addPrintFormatter(fmt, startingAtPageAt: 0) 

    // 3. Assign paperRect and printableRect 

    let page = CGRect(x: 10, y: 10, width: 595.2, height: 841.8) // A4, 72 dpi, x and y are horizontal and vertical margins 
    let printable = page.insetBy(dx: 0, dy: 0) 

    render.setValue(NSValue(cgRect: page), forKey: "paperRect") 
    render.setValue(NSValue(cgRect: printable), forKey: "printableRect") 

    // 4. Create PDF context and draw 

    let pdfData = NSMutableData() 
    UIGraphicsBeginPDFContextToData(pdfData, CGRect.zero, nil) 

    for i in 1...render.numberOfPages { 

     UIGraphicsBeginPDFPage(); 
     let bounds = UIGraphicsGetPDFContextBounds() 
     render.drawPage(at: i - 1, in: bounds) 
    } 

    UIGraphicsEndPDFContext(); 

    // 5. Save PDF file 

    var path = "\(NSTemporaryDirectory())\(title).pdf" 
    pdfData.write(toFile: path, atomically: true) 
    print("open \(path)") // check if we got the path right. 
     // open share dialog 
     print("opening share dialog") 
     // Initialize Document Interaction Controller 
     self.interactionController = UIDocumentInteractionController(url: URL(fileURLWithPath: path)) 
     // Configure Document Interaction Controller 
     self.interactionController!.delegate = self 
     // Present Open In Menu 
     self.interactionController!.presentOptionsMenu(from: yourexportbarbuttonoutlet, animated: true) // create an outlet from an Export bar button outlet, then use it as the `from` argument 
} 

:スウィフト3でシンプルな.pdfファイルの作成と共有


そのための共有ダイアログ。


編集: Googleドキュメントで開くためにテキストを取得する回避策(磨かれていないが)面白いが見つかりました:ここでは「.txtファイルを作成する」セクションから関数を使用して、ちょうどにファイル名を変更します"\(title).docx"。これにより、ドキュメントが.docxのドキュメントであると考えられ、ドキュメントを正常に開くことができます。残念ながら、実際にはが実際のドキュメントファイルを作成しないため、Pages、Word、または他のアプリで開くことができない無効なドキュメントが作成されます。また、インタラクションコントローラでは、ページで開くことができるようにユーザーに表示されますが、これは必ず失敗します。

+0

あなたは本当にここでの問題全体を解決していませんでしたが、あなたは良い説明といくつかのまともな選択肢を提供しました。ここでいくつかのインターネットポイントがあります。 – owlswipe

+0

@JohnRamosはい、少し不幸ですが、これは本当に私が見つけることができる唯一の答えです。 –

+0

素晴らしい投稿です! pdfチュートリアルをありがとう! – LinusGeffarth

0

Word文書で直接「テキストを編集する」ことはできません。 .docxファイルは、実際には、特定のファイル/フォルダ構造を持つZIPファイルです(.zip &の名前に変更してください).Office Open XML形式(https://en.wikipedia.org/wiki/Office_Open_XML)に準拠しています。

SwiftでOffice OpenXML形式を変更するライブラリがない場合は、コードを自分で記述するだけでよいでしょう。しかし、簡単な要求がある場合は(普通のテキスト)、これはあまり複雑ではありません。

マイクロソフトでは、GitHubのOpenXMLライブラリをhttps://github.com/OfficeDev/Open-XML-SDKに持っています。このライブラリはあなたに役立つかもしれません。

+0

私はライブラリを見つけられませんでした。私がGithubプロジェクトの関連するファイルを指すことができれば、それは本当に素晴らしいでしょう(それはとても大規模です)。 – owlswipe

+0

はい、それはかなり大きいです...彼らはすべての要素のためにたくさんのクラスを持っていて、それらを解析し、同様に制限を加えます。それをまとめてまとめるには少し時間がかかるでしょう。もう1つのオプションは、基本的なDOCXファイルとリバースエンジニアの種類を保存し、変更する必要があるものを見つけ出すことです。 –

-1

Googleドキュメントにドキュメントを転送したいユーザーについて言えば、代わりにRTF形式での作業を検討することができます。また、docxファイルをRTF形式にエクスポートして、それを処理し、完了したら修正されたRTFファイルをGoogleドキュメントに直接インポートすることもできます。

これは、RTFも実行可能なオープンフォーマットであるため、これをお勧めします。https://www.safaribooksonline.com/library/view/rtf-pocket-guide/9781449302047/ch01.htmlを参照してください。その参照に基づいて、次の単純な(ascii)出力を生成することができます。

{\rtf1\ansi\deff0 {\fonttbl {\f0 Verdana;}} 
\f0\fs16 
Hello World! 
} 

拡張子が.rtfのファイルとして保存します。

+0

私は正常にrtfファイルを作成して共有することができますが、UIDocumentInteractionControllerは少なくともオプションとしてPagesを持つtxtファイルとは異なり、Open In PageやOpen In Docsをオプションとして持っていません。ページでrtfを開くにはどうすればよいですか?そして、私はファイルを正しく作成していることを知っています。なぜなら、Airdrop経由でMacにエクスポートすると、それは素晴らしいように見えるからです。 – owlswipe

+0

ページでRTFを開くことができません。 Docsもどちらもできません。だから私はこれで正常にRTFを作ることはできますが、私はそれを開くことはできません。 – owlswipe

+0

私は、PagesもDocsもRTFファイルを開くことができないことに気づいていませんでした。 –

関連する問題