当前位置: 首页 > news >正文

【.net core】Rotativa 如何在linux上实现

1.安装 wkhtmltopdf

Rotativa 依赖于 wkhtmltopdf 工具,因此首先需要在 Linux 系统上安装它:

# 安装依赖
sudo apt-get update
sudo apt-get install -y libfontconfig1 libxrender1 libxext6 fontconfig# 下载并安装 wkhtmltopdf
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.deb
sudo dpkg -i wkhtmltox_0.12.6-1.buster_amd64.deb
sudo apt-get install -f  # 修复依赖问题

wkhtmltopdf工具库(各版本系统下):Releases · wkhtmltopdf/packaging · GitHub 

2. 配置 Rotativa

在 .NET Core 项目中,需要进行以下配置:

2.1 安装 Rotativa 包

dotnet add package Rotativa.AspNetCore

2.2 设置 wkhtmltopdf 路径

在 Startup.cs 中配置 Rotativa,指定 wkhtmltopdf 的路径:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Rotativa.AspNetCore;public class Startup
{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }public void ConfigureServices(IServiceCollection services){services.AddControllersWithViews();}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");app.UseHsts();}app.UseHttpsRedirection();app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");});// 设置 Rotativa 路径RotativaConfiguration.Setup(env.WebRootPath, "/usr/local/bin");}
}

3. 创建控制器和视图

下面是一个简单的控制器示例,用于生成 PDF:

using Microsoft.AspNetCore.Mvc;
using Rotativa.AspNetCore;public class PdfController : Controller
{public IActionResult GeneratePdf(){// 从视图生成 PDFreturn new ViewAsPdf("PdfView"){FileName = "document.pdf",PageOrientation = Rotativa.AspNetCore.Options.Orientation.Landscape,PageSize = Rotativa.AspNetCore.Options.Size.A4};}public IActionResult GeneratePdfFromHtml(){// 从 HTML 字符串生成 PDFstring htmlContent = "<h1>Hello, World!</h1><p>This is a PDF generated from HTML.</p>";return new HtmlAsPdf(htmlContent){FileName = "html-document.pdf",PageSize = Rotativa.AspNetCore.Options.Size.A4};}
}

4. 处理 Linux 权限问题

在 Linux 上运行 wkhtmltopdf 时,可能会遇到权限问题。确保:

  1. wkhtmltopdf 可执行文件具有执行权限:

    sudo chmod +x /usr/local/bin/wkhtmltopdf
  2. 如果在容器中运行,可能需要以特权模式运行或调整 SELinux/AppArmor 设置。

5. 处理字体问题

wkhtmltopdf 在 Linux 上可能无法正确渲染某些字体。可以安装缺失的字体:

# 安装常用字体
sudo apt-get install -y ttf-mscorefonts-installer
sudo fc-cache -fv

6. 故障排除 

 如果遇到内存或渲染问题,可以尝试使用 --disable-smart-shrinking 选项(如未出现问题则不添加):

return new ViewAsPdf("PdfView")
{CustomSwitches = "--disable-smart-shrinking"
};

相关文章:

  • Vue Hook Store 设计模式最佳实践指南
  • laya3的2d相机与2d区域
  • 嵌入式软件--stm32 DAY 8.5 基础复习总结
  • 高光谱成像相机:基于高光谱成像技术的玉米种子纯度检测研究
  • 抖音、快手无水印福音开源下载器之蓝猫 BlueCatKoKo
  • 安科瑞Acrelcloud-6200系统:智慧路灯安全用电监控平台架构解析
  • Day06
  • Vue3实现折叠面板
  • 如何更好的理解云计算和云原生?
  • 自动驾驶与智能交通:构建未来出行的智能引擎
  • 【Linux】网络--传输层--深入理解TCP协议
  • 微服务各个部分的作用
  • 自动驾驶中的路径跟踪:Python实现与技术解析
  • Free2AI:企业智能化转型的加速器
  • C++通用日志模块
  • 【Linux篇】叩响新世界的大门:线程
  • 在VirtualBox中打造高效开发环境:CentOS虚拟机安装与优化指南
  • vue3 导出excel
  • 第一章 Linux的例行性工作(计划任务)
  • vite配置一个css插件
  • amh安装wordpress/杭州网站优化咨询
  • 律师网站设计/网站排名软件推荐
  • 0基础怎么做网站模版/seo线上培训班
  • web端商城网站开发/百度热门排行榜
  • 做独立网站电商需要办营业执照吗/安卓系统优化软件
  • 自己做网站上传视频/网站如何做seo排名