当前位置: 首页 > 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"
};

http://www.xdnf.cn/news/706393.html

相关文章:

  • 分布式数据库备份实践
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Split Landing Page(拆分展示页)
  • CSS篇-1
  • dis css port brief 命令详细解释
  • Windows MongoDB C++驱动安装
  • idea本地git上传gitee码云失败分析,push rejected+git手动融合
  • 工程化架构设计:Monorepo 实战与现代化前端工程体系构建
  • 从零开始创建 Vue 3 开发环境并构建第一个 Demo
  • 前端-关于apk文件分片上传
  • 代码随想录算法训练营 Day59 图论Ⅸ dijkstra优化版 bellman_ford
  • 基于URL弹窗的图片链接生成功能技术实现
  • 快速了解 GO 之依赖注入与 mock测试
  • [Go] Option选项设计模式 — — 编程方式基础入门
  • 驱动开发(2)|鲁班猫rk3568简单GPIO波形操控
  • 2025年数字经济与绿色金融国际会议:智能金融与可持续发展的创新之路
  • Vue Hook Store 设计模式最佳实践指南
  • 计算机操作系统(十四)互斥锁,信号量机制与整型信号量
  • C语言文件读取中文乱码问题解析与解决方案
  • Spring boot集成milvus(spring ai)
  • 员工管理系统 (Python实现)
  • 智能手机上用Termux安装php+Nginx
  • 金融欺诈有哪些检测手段
  • 关于AWESOME-DIGITAL-HUMAN的部署
  • 【HW系列】—C2远控服务器(webshell链接工具, metasploit、cobaltstrike)的漏洞特征流量特征
  • 38. 自动化测试异步开发之编写客户端异步webdriver接口类
  • 基于ELK的分布式日志实时分析与可视化系统设计
  • 每日刷题c++
  • UE5蓝图中播放背景音乐和使用代码播放声音
  • 100个 Coze 智能体实战案例
  • tiktoken学习