我从WebAPI控制器返回byte [],并成功下载PDF。 我正在使用iTextSharp(LGPL)4.1.6免费PDF转换器。 要安装iTextSharp(LGPL/MPL),请在软件包管理器控制台中运行以下命令。
安装,包装iTextSharp的,LGPL -Version 4.1.6
服务器端代码
[Route("Export/ExportToPdf")]
public byte[] ExportToPdf(string html)
{
MemoryStream msOutput = new MemoryStream();
TextReader reader = new StringReader(html);
Document document = new Document(new Rectangle(842, 595));
PdfWriter writer = PdfWriter.GetInstance(document, msOutput);
document.Open();
document.HtmlStyleClass = @"<style>*{ font-size: 8pt; font-family:arial;}</style>";
var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(html), null);
foreach (var htmlElement in parsedHtmlElements)
{
document.Add(htmlElement as IElement);
}
document.Close();
return msOutput.ToArray();
}
客户端代码。
//Call this function inside of AJAX success.
function ExportToPDF(data) {
//base64 To ArrayBuffer
var binaryString = window.atob(data);
var binaryLen = binaryString.length;
var bytes = new Uint8Array(binaryLen);
for (var i = 0; i < binaryLen; i++) {
var ascii = binaryString.charCodeAt(i);
bytes[i] = ascii;
}
//-------
var link = document.createElement('a');
link.href = window.URL.createObjectURL(new Blob([bytes], { type: 'application/pdf' }));
link.download = "Report.pdf";
link.click();
}
查看方法的定义,第二个参数是您试图序列化的值。所以它试图做的是序列化一个'FileStream',它可能不是可序列化的。尝试将该文件读入一个字符串并将该字符串用作第二个参数。 –
可能相关:http://stackoverflow.com/questions/9541351/returning-binary-file-from-controller-in-asp-net-web-api – dbc