Импорт и экспорт PDF и Word Doc SwiftUI

#pdf #import #swiftui #export #word

Вопрос:

Я не смог импортировать или экспортировать документы PDF или .doc в свое приложение. Этот код ниже сохраняет выбранный pdf-файл в памяти iCloud или телефона, но когда я пытаюсь просмотреть файл pdf, он всегда преобразуется в документ только с текстом «Привет, мир».

Я предполагаю, что мне нужно измениться allowedContentTypes внутри .fileImporter и contentType внутри .fileExporter , но после некоторых исследований я не смог найти рабочий пример в Интернете.

 @State private var document: MessageDocument = MessageDocument(message: "Hello, World!")
.fileImporter(
            isPresented: $isImporting,
            allowedContentTypes: [UTType.pdf],
            allowsMultipleSelection: false
        ) { result in
            do {
                guard let selectedFile: URL = try result.get().first else { return }
                
                //trying to get access to url contents
                if (CFURLStartAccessingSecurityScopedResource(selectedFile as CFURL)) {
                    
                    guard let message = String(data: try Data(contentsOf: selectedFile), encoding: .utf8) else { return }
                    
                    document.message = message
                    
                    //done accessing the url
                    CFURLStopAccessingSecurityScopedResource(selectedFile as CFURL)
                }
                else {
                    print("Permission error!")
                }
            } catch {
                // Handle failure.
                print(error.localizedDescription)
            }
        }
        .fileExporter(
            isPresented: $isExporting,
            document: document,
            contentType: UTType.data,
            defaultFilename: "Message"
        ) { result in
            if case .success = result {
                // Handle success.
            } else {
                // Handle failure.
            }
        }
    }
}
 

Документ-сообщение

 import SwiftUI
import UniformTypeIdentifiers

struct MessageDocument: FileDocument {
    
    static var readableContentTypes: [UTType] { [.plainText] }

    var message: String

    init(message: String) {
        self.message = message
    }

    init(configuration: ReadConfiguration) throws {
        guard let data = configuration.file.regularFileContents,
              let string = String(data: data, encoding: .utf8)
        else {
            throw CocoaError(.fileReadCorruptFile)
        }
        message = string
    }

    func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
        return FileWrapper(regularFileWithContents: message.data(using: .utf8)!)
    }
    
}