Tah*_*ine 5 pdf iphone encoding objective-c nsdata
在处理读取iPhone应用程序时,它在UIWebView中显示nsdata(html和pdf).我在一些PDF验证逻辑中遇到了麻烦.我有一个NSData对象,我知道它包含一个扩展名为.pdf的文件.我想限制无效的PDF进一步获取.这是我第一次尝试验证代码,它似乎适用于大多数情况:
// pdfData is an NSData *
NSData *validPDF = [[NSString stringWithString:@"%PDF"] dataUsingEncoding: NSASCIIStringEncoding];
if (!(pdfData && [[pdfData subdataWithRange:NSMakeRange(0, 4)] isEqualToData:validPDF])) {
// error
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,几天前上传了一个新的pdf.从某种意义上说,UIWebView会很好地显示它,但它无法通过我的验证测试.我已经将这个问题追溯到一开始就是一堆垃圾字节这一事实,%PDF在第14组十六进制字符中间出现(25或%恰好是第54个字节):
%PDF: 25504446
Breaking PDF: 00010000 00ffffff ff010000 00000000 000f0100 0000b5e0 04000200 01000000 ffffffff 01000000 00000000 0f010000 0099e004 00022550 44462d31 etc...
Run Code Online (Sandbox Code Playgroud)
验证NSData是PDF的最佳做法是什么?
这个特定的PDF可能有什么问题(它声称它是由PaperPort 11.0编码的,不管是什么)?
谢谢,
麦克风
雨燕4
extension Data {
var isPDF: Bool {
guard self.count >= 1024 else { return false }
let pdfHeader = Data(bytes: "%PDF", count: 4)
return self.range(of: pdfHeader, options: [], in: Range(NSRange(location: 0, length: 1024))) != nil
}
}
Run Code Online (Sandbox Code Playgroud)
在 Swift 中我有以下内容:
var isPDF:Bool = false
if assetData.length >= 1024 //only check if bigger
{
var pdfBytes = [UInt8]()
pdfBytes = [ 0x25, 0x50, 0x44, 0x46]
let pdfHeader = NSData(bytes: pdfBytes, length: 4)
let foundRange = assetData.rangeOfData(pdfHeader, options: nil, range: NSMakeRange(0, 1024))
if foundRange.length > 0
{
isPDF = true
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2890 次 |
| 最近记录: |