在ASP MVC 5中使用Rotativa生成PDF时隐藏打印按钮与导航菜单
解决Rotativa生成PDF时隐藏导航菜单和打印按钮的问题
我之前也碰到过一模一样的情况,用下面这几个方法就能轻松搞定:
方法1:利用CSS打印媒体查询(最便捷)
给页面里不想出现在PDF中的元素(导航菜单、打印按钮)添加针对性的CSS,通过@media print媒体查询让它们在打印时隐藏:
@media print { /* 替换成你实际的导航菜单选择器,比如.navbar或者#main-nav */ .navbar, /* 替换成打印按钮的选择器,比如#print-btn或者.print-button */ #print-btn { display: none !important; } }
把这段CSS放在你的视图文件里,或者全局样式表中。Rotativa底层依赖的wkhtmltopdf会自动识别打印媒体查询的规则,生成PDF时就会隐藏这些元素。
方法2:创建专门的PDF视图(最彻底)
如果不想折腾样式,可以直接做一个仅用于生成PDF的视图,这个视图里只保留需要导出的内容,完全去掉导航菜单和打印按钮。然后在控制器里让Rotativa渲染这个视图:
public ActionResult ExportToPdf() { // 传递和原视图相同的模型数据 var model = GetYourModelData(); return new ViewAsPdf("PdfExclusiveView", model); }
要是原视图里有很多可复用的内容,可以把核心内容抽成部分视图(Partial View),让原视图和PDF视图都引用这个部分视图,避免代码重复。
方法3:通过Rotativa的自定义参数强制启用打印样式
如果你的打印样式已经写好了,但没生效,可以在调用Rotativa的时候加上--print-media-type参数,强制wkhtmltopdf使用打印媒体类型:
return new ViewAsPdf("YourOriginalView") { CustomSwitches = "--print-media-type" };
这个参数会确保页面的打印样式被正确应用,那些标记为打印时隐藏的元素就不会出现在PDF里了。
小提示
- 一定要确认CSS选择器和页面元素的类/ID完全匹配,不然样式不会生效哦
- 如果用方法2,记得保证PDF视图的模型数据和原视图一致,避免出现数据缺失的情况
内容的提问来源于stack exchange,提问作者Deepu Reghunath
相关产品推荐
相关产品推荐

