swift - 加载从 WKWebView 中注入的 AJAX GET 检索的 PDF 二进制文件到 PDFKit
问题描述
我正在尝试从受身份验证保护的网站截取 ajax 传递的 pdf 文件。由于 ajax 提供文件,因此 URL 不包含用于下载的“.pdf”链接,而是将 PDF 文件作为内容处置附件提供。
到目前为止,当decisionPolicyFor navigationResponse 委托方法检测到“application/pdf”mimetype 时,我使用以下代码调用evaluateJavaScript 方法:
func readUrlContent(url: NSURL, completionHandler: @escaping (_ result: String) -> Void) {
self.evaluateJavaScript("(function() { var result = ''; $.ajax({type: 'GET', url: '\(url)', contentType: 'application/pdf; charset=utf-8', success: function(r) {result = r}, failure: function() {result = null}, async: false }); return result })()", completionHandler: { (response, error) -> Void in
let result = response as! String
completionHandler(result)
})
}
使用这个注入的代码(我之所以使用它是因为我在使用 WKWebView 的网站上遇到了 cookie 和身份验证问题),我可以成功地将完成处理程序中作为“结果”返回的 PDF 二进制字符串打印到日志中。现在的问题是我需要使用 PDFKit 将此 pdf 二进制数据转换为 PDF 文档。
当我使用这个二进制字符串并执行以下操作时:
self.data = result.data(using: .utf8)
self.performSegue(withIdentifier: "pdfSegue", sender: nil)
并将二进制 PDF 字符串传递给 PDFKit ViewController 以显示它,所有页面都显示为空白,并且出现以下错误:
“遇到意外的对象类型:7。”
“缺少或无效的对象编号。”
“缺少或无效的交叉引用流。”
“无效的流长度 3555;应该是 6444。”
“FlateDecode:解码错误:标头检查不正确。”
等等等等等等
如何/我可以获取返回的 PDF 二进制数据并使用 PDFKit 查看它?
解决方案
推荐阅读
- javascript - 如何解析excel中的列以将其转换为JSON
- javascript - 单击外部时隐藏弹出窗口
- javascript - 获取 XML 数据的 API 返回未定义
- spring - “无法解析方法”与 mockito
- javascript - 收听选中的 input="checkbox" 并为 input="text" Javascript Jquery 事件分配相等的百分比
- jquery - 拖放子行
- python-3.x - 如何获取 word2vec 词汇表中不存在的单词的向量?
- ruby-on-rails - Rails 设计未显示身份验证错误
- laravel - 在 Laravel DataTables as a Service 实现中表渲染后的排序问题
- javascript - 在开发模式下查看开发者控制台中的 Angular 6 点击绑定?