C# 在服务器(Asp.Net Core)中生成PDF并在浏览器(Angular)中检索
我正在使用Asp.Net Core和ItextSharp生成PDF报告并发送到浏览器C# 在服务器(Asp.Net Core)中生成PDF并在浏览器(Angular)中检索,c#,angular,asp.net-web-api,C#,Angular,Asp.net Web Api,我正在使用Asp.Net Core和ItextSharp生成PDF报告并发送到浏览器 [HttpGet] public async Task<IActionResult> GetStream(string ids) { try { List<int> labRequestIds = JsonConvert.DeserializeObject<List<int>>(requestIds);
[HttpGet]
public async Task<IActionResult> GetStream(string ids)
{
try
{
List<int> labRequestIds = JsonConvert.DeserializeObject<List<int>>(requestIds);
MemoryStream ms = new MemoryStream();
Document doc = new Document(PageSize.A4, 30f, 30f, 30f, 30f);
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
await CreatePlateDoc(labRequestIds, doc);
doc.Close();
writer.Flush();
ms.Seek(0, SeekOrigin.Begin);
return File(ms, "application/pdf");
}
}
但它不起作用。下载的pdf是空的,但有相关信息。最后我这样解决了它:
public async Task<IActionResult> CreatePlatePdf(string dto)
{
try
{
List<int> dto= JsonConvert.DeserializeObject<List<int>>(dto);
MemoryStream ms = new MemoryStream();
Document doc = new Document(PageSize.A4, 30f, 30f, 30f, 30f);
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
await this.CreateDoc(dto, doc);
doc.Close();
writer.Flush();
byte[] byteInfo = ms.ToArray();
ms.Write(byteInfo, 0, byteInfo.Length);
ms.Seek(0, SeekOrigin.Begin);
return this.File(ms, "application/pdf", fileName.pdf);
}
}
所以现在我唯一的问题是你可以在没有授权的情况下调用它。有人知道如何在调用我的设备时添加授权(标题)吗?知道如何解决这个问题吗?提前谢谢。您所说的
是空的,但有相关信息是什么意思?是0字节吗?或者它有空白页面?当我用notepad++打开它时,它有代码,但当我用adobe打开它时,页面是空白的。当你直接从浏览器从控制器调用操作时会发生什么?比如:如果我称之为pdf,屏幕上显示的是全新的好东西。那么,我应该怎么做才能直接下载生成的pdf,或者至少在点击按钮后显示此链接
downloadClick() {
this._fileGeneratorService.getPlateStream(this.selectedRequestIds)
.then(data => {
let saveAs = require('file-saver');
let name = this.selectedRequests.map(function (x) {
return x.code;
}).join();
let blob = new Blob([data], { type: 'application/pdf });
saveAs(blob, name);
})
.catch(err => console.log(err));
}
public async Task<IActionResult> CreatePlatePdf(string dto)
{
try
{
List<int> dto= JsonConvert.DeserializeObject<List<int>>(dto);
MemoryStream ms = new MemoryStream();
Document doc = new Document(PageSize.A4, 30f, 30f, 30f, 30f);
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
await this.CreateDoc(dto, doc);
doc.Close();
writer.Flush();
byte[] byteInfo = ms.ToArray();
ms.Write(byteInfo, 0, byteInfo.Length);
ms.Seek(0, SeekOrigin.Begin);
return this.File(ms, "application/pdf", fileName.pdf);
}
}
downloadPlatesClick()
{
window.location.href = url_pdf;
}