3 Stimmen

iPhone/iPad Base64->NSData->PDF wie geht das?

Obj-C oder Monotouch.Net C# Antworten sind in Ordnung.

Ich habe eine Base64-Zeichenfolge, die ein über einen Webdienst empfangenes PDF-Dokument ist. Ich kann die NSData.

Wie kann ich die NSData als PDF-Datei speichern?

-- Ich erhalte die NSData auf diese Weise.

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

3voto

Anomie Punkte 89467

Der einfachste Weg, sie zu speichern, ist wahrscheinlich die Verwendung von NSData's writeToFile:options:error: méthode.

0voto

Ian Vink Punkte 63460

Ich habe festgestellt, dass die Verwendung des .NET-Frameworks besser funktioniert als der Versuch, das iOS-Framework für dieses Problem zu verwenden. Damit wird eine beliebige Datei in ihr Original konvertiert und dann auf dem iPhone/iPad-Gerät gespeichert. Der "Pfad" ist nur ein Ordner auf dem Dev-Ice.

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

0voto

fefferoni Punkte 191

Ich arbeite an einem Projekt, bei dem ich vor kurzem dasselbe tun musste, was Sie beschreiben. Ich erhalte base64-kodierte PDF-Dateien als Strings von einem .NET-Webdienst, die in ihr Original dekodiert und als PDF-Dateien im Dokumentenverzeichnis der Anwendung gespeichert werden müssen.

Meine Lösung war:

  1. Utilice ASIHTTPRequest um mit dem Webdienst zu kommunizieren.
  2. Ich verwende dann TBXML um eingehendes Xml zu analysieren und die base64 als NSString zu erhalten.
  3. Zum Dekodieren der Zeichenfolge verwende ich eine Methode aus der QSUtilities-Bibliothek namens decodeBase64WithString.
  4. Schließlich speichere ich das Ergebnis mit NSData's writeToFile.

Ich habe diese Methode bei PDF-Dateien mit einer Größe von bis zu 25 MB getestet und erfolgreich angewendet. Ich hatte auch ein paar Testläufe mit einer 48mb-Datei, aber diese Datei machte die decodeBase64WithString-Methode nehmen zu viel Speicher und meine App abgestürzt. Ich habe noch keine Lösung für dieses Problem gefunden.

Wenn Sie mit mehreren großen Dateien arbeiten, sollten Sie hin und wieder Ihren Speicher freigeben. Ich habe alle meine Dateien in einer Schleife, in der ich meinen eigenen nsautorelease-Pool verwenden und ihn am Ende der Schleife leeren musste, um alle automatisch freigegebenen Objekte freizugeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X