Создайте CGPDFDocument из байтового массива - PullRequest
2 голосов
/ 21 марта 2012

В MonoTouch я ищу, чтобы создать CGPDFDocument из байтового массива, перенесенного обратно в текст, закодированный из веб-службы.Однако MonoTouch, похоже, не поддерживает создание из чего-либо, кроме локального файла или загрузки с URL-адреса.

Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 21 марта 2012

Одним из вариантов будет p / invoke в CGPDFDocumentCreateWithProvider для создания собственного экземпляра CGPDFDocument. Он не должен быть слишком сложным, поскольку CGDataProvider уже доступен в MonoTouch.

OTOH, получающий массив (от веб-службы), может занять много памяти (если вы не уверены на 100% в их небольшом размере). Например. преобразование строки в байт, все это должно уместиться в памяти ...

Чтобы быть в безопасности, вы можете захотеть сериализовать массив (или, если возможно, потоковую передачу напрямую) в локальный (временный / кэш) файл (чтобы избежать другой копии в памяти для экземпляра GCPDFDocument), а затем вызвать существующий CGPDFDocument.FromFile API.

ОБНОВЛЕНИЕ : MonoTouch 5.3.3+ предоставит новый конструктор для GCPDFDocument, который принимает CGDataProvider. В то же время вы можете использовать следующий код.

[DllImport (Constants.CoreGraphicsLibrary)]
extern static IntPtr CGPDFDocumentCreateWithProvider (IntPtr provider);

static GCPDFDocument FromArray (byte[] array)
{
    using (var dp = new CGDataProvider (array, 0, array.Length) {
        return new CGPDFDocument (CGPDFDocumentCreateWithProvider (dp.Handle));
    }
}
...