2012-03-08 80 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];