Here's a little Swift playground that shows how you can check whether a Data object (for example from a file) is a PDF. It's done by checking the first couple of bytes.
import UIKit
// http://stackoverflow.com/a/26503955/1085556
func dataWithHexString(hex: String) -> Data {
var hex = hex
var data = Data()
while(hex.characters.count > 0) {
let c: String = hex.substring(to: hex.index(hex.startIndex, offsetBy: 2))
hex = hex.substring(from: hex.index(hex.startIndex, offsetBy: 2))
var ch: UInt32 = 0
Scanner(string: c).scanHexInt32(&ch)
var char = UInt8(ch)
data.append(&char, count: 1)
}
return data
} struct HeaderError: Error {
} // http://stackoverflow.com/a/17280876/1085556
let smallestPDFasHex = "255044462D312E0D747261696C65723C3C2F526F6F743C3C2F50616765733C3C2F4B6964735B3C3C2F4D65646961426F785B302030203320335D3E3E5D3E3E3E3E3E3E"
let data = dataWithHexString(hex: smallestPDFasHex) let headerRange: Range<Data.Index> = 0..<4
let header = data.subdata(in: headerRange)
guard let headerString = String(data: header, encoding: .ascii) else {
print("Header not found")
throw HeaderError()
} if headerString == "%PDF" {
print("It's a PDF")
} else {
print("It's NOT a PDF")
}