残念ながら、彼らが(あなたが彼らの内部構造を明らかにするれ、.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、または他のアプリで開くことができない無効なドキュメントが作成されます。また、インタラクションコントローラでは、ページで開くことができるようにユーザーに表示されますが、これは必ず失敗します。
この質問は広すぎるため、スタックオーバーフローにはあまり適していません。まだ閉鎖されていない唯一の理由は、奨励金が付いているからです。 – JAL
誰かがそれに賞金を加えたら、閉鎖のために貧弱な投稿にフラグを立てることはできません。 –