2

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

有人知道怎么做吗?

4

1 回答 1

0

一种选择是 p/invoke 到CGPDFDocumentCreateWithProvider以创建您自己的CGPDFDocument. 它不应该太复杂,因为CGDataProvider已经在 MonoTouch 中可用。

OTOH 接收数组(来自 Web 服务)会消耗大量内存(除非您 100% 确定它们的小尺寸)。例如字符串到字节的转换,它必须都适合内存......

为了安全起见,您可能希望首先将数组序列化(或最好直接将其流式传输)到本地(临时/缓存)文件(以避免GCPDFDocument实例的另一个内存副本),然后调用现有的CGPDFDocument.FromFileAPI。

更新: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));
    }
}
于 2012-03-20T23:02:06.007 回答