Одним из вариантов будет 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));
}
}