2012-03-08 65 views
0

我正尝试从xCode中的二进制xString创建一个PDF对象。 (从OData的SAP,UTF-8)未能找到PDF标头:xCode中找不到'%PDF'

这里是编码:

const char* buf = [temp1 UTF8String]; 
pdffile = [NSData dataWithBytes:buf length:length1]; 
[webDisplay loadData:self.pdffile MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil]; 
self.webDisplay.scalesPageToFit = YES; 

temp1目录是一个XString 长度1是以字节为单位的PDF文件的长度。

我获得以下错误信息:

未能找到PDF标题: '%PDF' 未找到

一些想法?

+0

什么BUF看起来不一样?它是否有效PDF。看看前几个字节,你是否看到%PDF? – 2012-03-08 11:27:34

+0

不幸的是没有%的PDF字符串。 buf开头为:255044462D312E350D0A25B5B5B5B50D0A312030206F626A0D0A3C3C2F547970652F436174616C6F67 – Alexander 2012-03-08 12:34:57

+1

这是正确的,25 =%,50 = P等等。我不确定它为什么不起作用。 – 2012-03-08 14:41:51

回答

1

在我的不正确删除回答你说:

我用两个SAP标准功能模块,从PDF创建XString: SCMS_AO_TABLE_GET_BYTES和SCMS_BINARY_TO_XSTRING -

当你说你有2550,你是2,然后是5等等,或者你的意思是0x25。 Hex 25是你想要的,如果你有一个ascii 2,那么ascii5肯定无法工作。检查调试器中的内存。

+0

Hi Paul,sap函数模块SCMS_BINARY_TO_XSTRING以二进制模式创建xstring并提供pdf文件的length1。 xstring = length1 * 2的实际长度。所以我认为它是正确的。 – Alexander 2012-03-08 19:20:12

+0

要确定的唯一方法是在调试器中检查内存。 – 2012-03-09 12:05:51

+0

这里是来自调试器的以下值:temp1:[link](http://www.file-upload.net/download-4181406/temp1.rtf.html); pdffile:[link](http://www.file-upload.net/download-4181404/pdffile.rtf.html);不幸的是,buf不可用:(gdb)po buf 0xa075000似乎不指向有效的对象。 – Alexander 2012-03-12 06:58:27

2

这里是解决方案: 在SAP系统有二进制数据(XSTRING)转换为Base64的方法: cl_http_utility => encode_x_base64 使用HTTP,能够传送的Base64数据。 在Xcode中我使用这个库: a link

// 3) Decode Base 64 
// Then you can put that back like this 
NSData *b64DecData = [Base64 decode:b64EncStr]; 

则:[webDisplay loadData:b64DecData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];