【问题标题】:Swift ResearchKit makePDFWithCompletionHandlerSwift ResearchKit makePDFWithCompletionHandler
【发布时间】:2015-09-22 05:44:33
【问题描述】:

我目前正在 swift 中开发一个基于 ResearchKit 框架(用 Objective-c 编写)的医学研究应用程序。我已将签名分配给同意文档,我正在尝试使用 makePDFWithCompletionHandler 创建 PDF 并通过电子邮件发送它。这是我目前在视图控制器中用于许可任务的完成处理程序:

func taskViewController(taskViewController: ORKTaskViewController, didFinishWithReason reason: ORKTaskViewControllerFinishReason, error: NSError?) {
    taskViewController.dismissViewControllerAnimated(true, completion: nil)
    if reason == .Completed {
            ConsentDocument.makePDFWithCompletionHandler(/*Completion handler Block*/){
                //Email pdf code here
            }
        }
}

我不知道要放置什么作为完成处理程序块。此外,一旦创建 pdf,我就找不到通过电子邮件发送 pdf 的代码。

在我的同意任务中,我有以下代码将签名分配给文档:

let signatureResult = ORKConsentSignatureResult(identifier: "ConsentDocumentParticipantSignature")
signatureResult.applyToDocument(ConsentDocument)

【问题讨论】:

    标签: ios swift pdf pdf-generation researchkit


    【解决方案1】:

    斯威夫特 3.1

    let result = taskViewController.result
                    if let stepResult = result.stepResult(forStepIdentifier: ConsentReviewStepIdentifier),
                        let signatureResult = stepResult.results?.first as? ORKConsentSignatureResult {
                        signatureResult.apply(to: consentDocument)
    
                        consentDocument.makePDF { (data, error) -> Void in
                            var docURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last as NSURL?
                            docURL = docURL?.appendingPathComponent("myFileName.pdf") as NSURL?
    
    
                            //write your file to the disk.
    
    
                            do {
    
                                try data?.write(to:docURL! as URL)
                                print(docURL! as URL)
    
    
    
    
                            } catch let error {
    
                                print(error.localizedDescription)
                            }
    
    
                            //now you can see that pdf in your applications directory
    
                        }
    
                    }
    

    【讨论】:

      【解决方案2】:

      通过获取签名以供审核步骤并将其应用于同意文档,您可以使用 makePdf 完成块制作 pdf,并可以保存在磁盘上或发送到服务器。

      func taskViewController(taskViewController: ORKTaskViewController, didFinishWithReason reason: ORKTaskViewControllerFinishReason, error: NSError?) {
          //Handle results with taskViewController.result
          let taskResult = taskViewController.result
      
          if reason  == ORKTaskViewControllerFinishReason.Completed
          {
              var signatureResult : ORKConsentSignatureResult = taskResult.stepResultForStepIdentifier("ConsentReviewStep")?.firstResult as! ORKConsentSignatureResult
              let document = ConsentDocument.copy() as! ORKConsentDocument
              signatureResult.applyToDocument(document)
              document.makePDFWithCompletionHandler({ (pdfData:NSData?, error: NSError?) -> Void in
      
                  var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last as? NSURL                
                  docURL = docURL?.URLByAppendingPathComponent( "myFileName.pdf")
      
                  //write your file to the disk.
                  pdfData?.writeToURL(docURL!, atomically: true)
                  //now you can see that pdf in your applications directory
      
      }
      

      【讨论】:

        【解决方案3】:

        对于 makePDFWithCompletionHandler 完成块,这对我有用(注意,这会将其写入块中的文件):

           ConsentDocument .makePDFWithCompletionHandler({ (NSData pdfFile, NSError error) -> Void in
                    // println("pdf created")
        
                    // finding document path  //TODO: Remove if not needed
        
                    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] .stringByAppendingPathComponent("Consent.pdf")
        
                    pdfFile!.writeToFile(documentsPath, atomically: false)
        
                    println(consentDocumentFromDirectory)
        
        
        
        
                })
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-18
          • 1970-01-01
          • 2018-03-19
          • 1970-01-01
          • 2017-07-07
          • 2021-02-02
          • 1970-01-01
          • 2018-11-19
          相关资源
          最近更新 更多