什么是将pdf转换为流的最有效方法

时间:2015-03-25 20:11:56

标签: c# wcf

我有一个WCF服务,它会收到一个id并返回一个基于id的pdf文件。我假设最好的方法是将pdf文件转换为某种字符串然后返回它。但是,我不确定要使用哪个流(Stream, Filestream, or MemoryStream)。

我知道我可以将pdf文件读取到一个字节数组,然后使用MemoryStream对它做一些事情,但我觉得有一种更有效的方法。

我尝试按照此帖中的建议进行操作:How to convert a pdf to a memory stream

对文件路径进行硬编码以返回如下:

return File(@"C:\MyFile.pdf", "application/pdf");

只是为了看看会发生什么,但在File上得到一个错误:`'System.IO.File'是'type',但用作'变量'。

有人能提供一点见解吗?

修改

这是我正在努力的目标:

[OperationContract]
[WebInvoke(Method = "GET",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "/GetInvoiceFile")]
Stream GetInvoiceFile(string id);

public Stream GetInvoiceFile(string BillingPeriodId)
{
    byte[] bytes = File.ReadAllBytes(@"C:\pdf-test.pdf");
    return new MemoryStream(bytes);
}

我只是不知道如何编辑我的OperationContract以返回pdf。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

答案取决于你拥有的东西。您似乎将文件路径设为string。可能,您的WCF方法返回byte[]。您需要以某种方式将该路径有效地转换为byte[]

您可以使用File.ReadAllBytes(string path)

执行此操作

WCF也支持流式写入,但这有点复杂,性能优势对于小文件来说是可疑的。

您尝试指定MIME类型("application/pdf")的事实告诉我您并不真正理解WCF服务和HTTP服务之间的区别。研究这是你的功课。