2011-03-11 83 views
3

Obj-C或Monotouch.Net C#答案很好。iPhone/iPad Base64-> NSData-> PDF如何?

我有一個Base64字符串,它是通過Web服務接收的PDF文檔。我可以得到NSData。

我該如何把NSData保存爲PDF?

- 我得到的NSData這樣 -

byte[] encodedDataAsBytes = System.Convert.FromBase64String (myBase64String); 
string decoded = System.Text.Encoding.Unicode.GetString (encodedDataAsBytes); 
NSData data = NSData.FromString (decoded, NSStringEncoding.ASCIIStringEncoding); 

回答

0

我發現使用.NET框架比嘗試爲此問題使用iOS框架效果更好。這將採取任何文件並將其轉換爲原始文件,然後將其保存到iPhone/iPad設備。 「路徑」只是dev冰上的一個文件夾。

using (var f = System.IO.File.Create (path)) 
{ 
    byte[] encodedDataAsBytes = System.Convert.FromBase64String (Base64PDFString); 
    f.Write (encodedDataAsBytes, 0, encodedDataAsBytes.Length); 
} 
3

保存它可能是使用的NSData的writeToFile:options:error:方法最簡單的方法。

0

我正在開發一個項目,最近我不得不完成你描述的同樣的事情。我從.NET Web服務獲取base64編碼的PDF文件作爲字符串,需要將其解碼爲原始文件並將其作爲PDF文件保存在應用程序文檔目錄中。

我的解決辦法是:

  1. 使用ASIHTTPRequest與Web服務進行通信。
  2. 然後,我使用TBXML來解析傳入的XML並獲取base64作爲NSString。
  3. 要解碼字符串,我使用QSUtilities庫中名爲decodeBase64WithString的方法。
  4. 最後我用NSData的writeToFile保存結果。

我已經測試併成功使用這種方法,PDF文件高達25MB。我也用一個48mb的文件進行了幾次測試運行,但是該文件使decodeBase64WithString方法佔用了太多的內存,並且我的應用程序崩潰了。還沒有找到解決這個問題的辦法..

如果你正在處理多個大文件,一定要在一段時間內釋放你的內存。我在一個循環中獲得了所有文件,在這個循環中我必須使用自己的nsautorelease池,並在循環結束時將其排空以釋放任何自動釋放的對象。

+0

嗨,你可以分享你的代碼給我這個ID [email protected] – siva 2011-05-30 12:58:42