首页 > 解决方案 > 从文件系统显示 PDF 时符合 ATS 政策

问题描述

我正在尝试从 HTML 文件生成 pdf,然后在 webView 上显示生成的 pdf。但是,我的实施将合规问题抛给了 ATS 政策,这让我很困惑。我的实现如下:

func export() {
    let filePath = Bundle.main.path(forResource: "index", ofType: "html")
    
    do {
        let htmlContent = try String(contentsOfFile: filePath!)
        
        if let pdfFileName = exportHTMLContentToPDF(HTMLContent: htmlContent) {
            let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
            let url = URL(fileURLWithPath: documentsPath, isDirectory: true).appendingPathComponent(pdfFileName).appendingPathExtension("pdf")
            
            let vc = WebViewController()
            vc.url = url
            vc.hidesBottomBarWhenPushed = true
            navigationController?.pushViewController(vc, animated: true)
        }
        
    } catch let error {
        print(error.localizedDescription)
    }
    
}

func exportHTMLContentToPDF(HTMLContent: String) -> String? {
    let printPageRenderer = CustomPrintPageRenderer()
    
    let printFormatter = UIMarkupTextPrintFormatter(markupText: HTMLContent)
    printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)
    
    if let pdfData = drawPDFUsingPrintPageRenderer(printPageRenderer: printPageRenderer) {
        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let pdfFilename = "\(documentsPath)/Exports.pdf"
        pdfData.write(toFile: pdfFilename, atomically: true)
        print(pdfFilename)
        return pdfFilename
    }
    
    return nil
}

//At WebViewController's viewDidLoad
var url: URL?
override func viewDidLoad() {
    super.viewDidLoad()

    if let url = url {
        let request = URLRequest(url: url)
        webView.load(request)
    }
}

我在这里抛出的错误信息:

App Transport Security 已阻止明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用程序的 Info.plist 文件配置临时例外。2018-09-09 14:17:28.909834+0800 App[1776:93209] 无法开始加载任务 <038CF619-0F68-4196-8B76-4E70DFD678A8>.<0>,因为它不符合 ATS 策略 2018-09- 09 14:17:28.910996+0800 App[1776:93173] NSURLConnection 完成错误 - 代码 -1022 /Users/MyName/Library/Developer/CoreSimulator/Devices/29504265-F97B-4145-AA09-7E8AD66C5F99/data/Containers/Data /Application/78C96743-8EFC-4D53-8ABA-D384321D2156/Documents/Exports.pdf 2018-09-09 14:17:29.078694+0800 App[1776:93160] 任务 <4F930735-1374-4DF3-A72B-F698A2BEA8BB>。 0> HTTP 加载失败(错误代码:-999 [1:89])

我可以尝试什么来解决这个问题?

标签: swift

解决方案


推荐阅读