在MonoTouch中,我希望从字节数组创建CGPDFDocument,该字节数组传输回从Web服务编码的文本。但是,MonoTouch似乎不支持从本地文件以外的其他任何内容或从URL下载的内容。

有人知道该怎么做吗?

最佳答案

一种选择是p /调用CGPDFDocumentCreateWithProvider以创建自己的CGPDFDocument实例。它应该不太复杂,因为CGDataProvider已在MonoTouch中提供。

OTOH(通过Web服务)接收阵列会消耗大量内存(除非您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));
    }
}

07-24 16:52