当我尝试加载pdf并且不知道原因时,我得到了这个日志。
failed to find PDF header: `%PDF' not found.
她的代码:
- (void)viewDidLoad
{
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://webdesign-schoenefeld.de/es-app/heute.pdf"]]];
NSLog(@"---------------pdfloading....,------------------------");
[webview addSubview:activityind];
timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/2.0)
target:self
selector:@selector(loading)
userInfo:nil
repeats:YES];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
我使用的是Xcode 6 Beta 5和iOS 8 beta 5。
感谢您的帮助。
答案 0 :(得分:9)
我同意,iOS 8 beta 5中似乎存在错误(或行为更改),这意味着您的代码不再有效(并且它是有效的。我有相同的功能,并且它在iOS 8中运行良好beta 4)。
我认为类型检测存在问题,因为如果我执行以下操作,它会起作用:
NSLog(@"About to request PDF document loading...");
NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlStr]];
[self.webView loadData:pdfData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
现在不应该使用一些代码"按原样#34;因为它是同步的。
我觉得Nithin的回答是有效的,但它没有回答iOS 8 beta 5中特别看到的问题。主要代码是相同的,会遇到相同的iOS错误。
答案 1 :(得分:5)
这对我有用
NSURL *targetURL = [NSURL fileURLWithPath:pdfFilePath]; // <pdfFilePath> if full path of your pdf file
NSData *pdfData = [[NSData alloc] initWithContentsOfURL:targetURL];
[self.webview loadData:pdfData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
答案 2 :(得分:4)
2014年9月9日更新:iOS8 GM解决了我与之合作的应用的问题。
2014年9月9日之前的回应 据报道,它是Apple在iOS8 Beta 5发行说明中的一个已知错误。 https://developer.apple.com/library/prerelease/ios/releasenotes/General/RN-iOSSDK-8.0/ https://devforums.apple.com/message/1017919#1017919
我们应该等待下一个版本,看看它是否已修复。
答案 3 :(得分:3)
我在iOS 8 beta 5中遇到了同样的问题。 像https://stackoverflow.com/a/25302602/2639006这样的代码有效,但我建议添加最后一个baseURL参数,因为内部pdf文档链接没有它就无法工作。
NSString *path = [[NSBundle mainBundle] pathForResource:@"pdf_NAME"ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSData *pdfData = [[NSData alloc] initWithContentsOfURL:targetURL];
[self.webView loadData:pdfData MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:targetURL];
答案 4 :(得分:1)
我多年来一直在为这个特殊问题挣扎,终于在今天找到了答案。我总是发现一些PDF在iOS中打开很好(或者像你的代码那样尝试在UIWebview
中加载它或者使用UIApplications的canOpenUrl:方法)但是其他的根本无法打开。
基本上,PDF需要设置页眉/页脚以便iOS可以打开(技术上它实际上只是Safari有这个问题,因为Quicklook和Acrobat Reader可以在没有问题的情况下处理devics上的无标题PDF )。
答案 5 :(得分:0)
我在iOS 8 SDK和Xcode 6上构建应用程序时遇到了同样的问题。我的问题是NSXMLParser在我选择的标签上调用了两次foundCharacters方法。我通过检查我的字符串数据是否为4的倍数来解决这个问题,这样我甚至可以尝试将其转换为基本的64位编码数据对象。一旦我发现该方法被调用了两次,我认为将这些字符串连接在一起会产生正确的数据:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if([self.currentElement isEqualToString:kWarrantyPDFXMLTagDocumentData]) {
if (self.combinedDocumentString == nil || self.combinedDocumentString.length == 0) {
self.combinedDocumentString = string;
}
else {
self.combinedDocumentString = [self.combinedDocumentString stringByAppendingString:string];
}
if (![self stringIsBase64:self.combinedDocumentString]) {
return;
}
pdfData = [[NSData alloc] initWithData:[NSData base64DataFromString:self.combinedDocumentString]];
// If you want to save your PDF, do so here.
NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"test.pdf"];
[pdfData writeToFile:path atomically:YES];
}
}
- (BOOL)stringIsBase64:(NSString *)str {
if ([str length] % 4 == 0) {
static NSCharacterSet *invertedBase64CharacterSet = nil;
if (invertedBase64CharacterSet == nil) {
invertedBase64CharacterSet = [[NSCharacterSet
characterSetWithCharactersInString:
@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="]
invertedSet];
}
return [str rangeOfCharacterFromSet:invertedBase64CharacterSet
options:NSLiteralSearch].location == NSNotFound;
}
return NO;
}
答案 6 :(得分:0)
我将生成的PDF文档发送到打印机时遇到此错误消息(至少在模拟器中)。通过提供CFDictionary而不是nil作为构建pdf上下文的最后一个参数,为PDF文档添加标题。这是Swift 3.0的帮助:
let infoDict : CFDictionary = [kCGPDFContextTitle as String : "myTitleHere"] as CFDictionary // Add title to PDF
let pdfData = NSMutableData()
if let dataConsumer : CGDataConsumer = CGDataConsumer(data: pdfData) {
let myMediaBox = CGRect(x: 0, y: 0, width: page.pageWidth, height: page.pageHeight)
if let pdfContext = CGContext(consumer: dataConsumer, mediaBox: &myMediaBox, infoDict) {
// .... more pdf stuff
}
}