iPhone / iPad Base64-> NSData-> PDF как? - PullRequest
3 голосов
/ 11 марта 2011

Ответы на Obj-C или Monotouch.Net C # в порядке.

У меня есть строка Base64, которая представляет собой документ 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);

Ответы [ 3 ]

3 голосов
/ 11 марта 2011

Самый простой способ сохранить это, вероятно, использовать метод NSData writeToFile:options:error:.

0 голосов
/ 12 апреля 2011

Я работаю над проектом, в котором мне недавно пришлось выполнить то же, что вы описываете. Я получаю файлы PDF в кодировке base64 в виде строк из веб-службы .NET, которые необходимо декодировать до их оригинала и сохранять как файлы PDF в каталоге документов приложений.

Мое решение было:

  1. Используйте ASIHTTPRequest для связи с веб-сервисом.
  2. Затем я использую TBXML , чтобы проанализировать входящий xml и получить base64 как строку NSString.
  3. Для декодирования строки я использую метод из библиотеки QSUtilities, который называется decodeBase64WithString.
  4. Наконец, я сохраняю результат с writeToFile NSData.

Я протестировал и успешно использовал этот метод с файлами PDF размером до 25 МБ. У меня также было несколько тестовых прогонов с файлом 48 Мб, но этот файл заставил метод decodeBase64WithString занимать слишком много памяти, и мое приложение упало. Пока не нашли решения для этого ..

Если вы работаете с несколькими большими файлами, обязательно время от времени освобождайте память. Я собрал все свои файлы в один цикл, в котором мне пришлось использовать свой собственный пул nsautorelease и слить его в конце цикла, чтобы освободить любые автоматически освобожденные объекты.

0 голосов
/ 11 марта 2011

Я обнаружил, что использование .NET Framework работает лучше, чем пытаться использовать iOS Framework для этой проблемы. Это займет любой файл и преобразует его в исходный, а затем сохранит его на устройстве iPhone / iPad. «путь» - это просто папка на льду разработчика.

using (var f = System.IO.File.Create (path))
{
   byte[] encodedDataAsBytes = System.Convert.FromBase64String (Base64PDFString);
   f.Write (encodedDataAsBytes, 0, encodedDataAsBytes.Length);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...