我從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