Eth*_*sky 1 c# wkhtmltopdf asp.net-core-mvc
我正在尝试使用 wkhtmltopdf 和 ASP.NET Core 3.1 生成自定义 PDF,以下是文档: https: //wkhtmltopdf.org/usage/wkhtmltopdf.txt
我的主要问题是:我应该如何以及在哪里放置这些选项?在 cshtml 里面?在控制器内?在哪里?
我无法在互联网上找到如何在 ASP.NET Core MVC 中使用它的文档。
这是我的代码,运行正常:
public async Task<IActionResult> PDF(int? id)
{
if(id == null)
{
return StatusCode(400);
}
var comanda = _comandasRepository.Get((int)id);
if(comanda == null)
{
return StatusCode(404);
}
return await _generatePdf.GetPdf("Views/Comandas/PDF.cshtml", comanda);
}
Run Code Online (Sandbox Code Playgroud)
这会生成一个 PDF:
但如果您注意到 PDF 有边距,我想删除这些边距。我在文档中发现我必须使用它,--margin-top 0但我不知道将其放在哪里才能使其工作。
我试过:
public async Task<IActionResult> PDF(int? id)
{
if(id == null)
{
return StatusCode(400);
}
var comanda = _comandasRepository.Get((int)id);
if(comanda == null)
{
return StatusCode(404);
}
return await _generatePdf.GetPdf("--margin-top 0 Views/Comandas/PDF.cshtml", comanda);
}
Run Code Online (Sandbox Code Playgroud)
但不起作用,我尝试将其放入 cshtml 代码内的纯 html 中,但也不起作用。我的问题看起来很简单,但我无法做到这一点,我该如何解决这个问题?
我的主要问题是:我应该如何以及在哪里放置这些选项?在 cshtml 里面?在控制器内?在哪里?
您的共享文档用于教您如何使用命令行对 pdf 进行一些操作。它不用于在代码隐藏中工作。
但如果您注意到 PDF 有边距,我想删除这些边距。我在文档中发现我必须使用 --margin-top 0 但我不知道将其放在哪里才能使其工作。
您需要通过创建ConvertOptions实例来添加边距:
public async Task<IActionResult> PDF(int? id)
{
var options = new ConvertOptions
{
PageMargins = new Wkhtmltopdf.NetCore.Options.Margins()
{
Top=0
}
};
_generatePdf.SetConvertOptions(options);
var comanda = _comandasRepository.Get((int)id);
var pdf = await _generatePdf.GetByteArray("Views/Comandas/PDF.cshtml", comanda);
var pdfStream = new System.IO.MemoryStream();
pdfStream.Write(pdf, 0, pdf.Length);
pdfStream.Position = 0;
return new FileStreamResult(pdfStream, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)
更详细的使用方法可以在github上下载示例代码:
https://github.com/fpanaccia/Wkhtmltopdf.NetCore.Example