欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Rotativa在ASP.NET Core MVC中创建PDF

程序员文章站 2022-04-24 10:11:10
在本文中,我们将学习如何使用Rotativa.AspNetCore工具从ASP.NET Core中的视图创建PDF。如果您使用ASP.NET MVC,那么Rot​​ativa工具已经可用,我们可以使用它来生成pdf。 创建一个MVC项目,无论您是core或不core,都可以nuget下包.命令如下: ......

在本文中,我们将学习如何使用rotativa.aspnetcore工具从asp.net core中的视图创建pdf。如果您使用asp.net mvc,那么rot​​ativa工具已经可用,我们可以使用它来生成pdf。

创建一个mvc项目,无论您是core或不core,都可以nuget下包.命令如下:

install-package rotativa
#或者
install-package rotativa.aspnetcore

这个工具由意大利人giorgio bozio创建。他需要在asp.net mvc中生成pdf,并且重复的任务是设置一种方法来创建pdf文档,用于业务流程或报告,下面废话不多说,我们开始吧。

在startup.cs类中配置rotativa.aspnetcore设置

我们在configure方法内的startup.cs类中添加此设置,以设置要访问的wkhtmltopdf.exe文件的相对路径。

public void configure(iapplicationbuilder app, ihostingenvironment env)
        {
            rotativaconfiguration.setup(env);
        }

 我们需要在wwwroot中添加rotativa文件夹,然后放入这两个exe,我把这两个文件已经放到了百度云盘。

使用Rotativa在ASP.NET Core MVC中创建PDF

然后我们添加一个demo控制器,定义一个get方法,其定义如下,通过viewaspdf方法,就可以通过pdf的形式去套住cshtml,也就达到了pdf的效果。

public class democontroller : controller
    {
        [httpget]
        public iactionresult demoviewaspdf()
        {
            return new viewaspdf("demoviewaspdf");
        }
    }

 就现在,我们需要通过控制器去创建一个视图,然后在视图中有如下定义:

@{
    viewdata["title"] = "demoviewaspdf";
}
<html>
<head>
    <meta charset="utf-8">
    <title>demo</title>
</head>
<body>
    <p>hello aspnetcore!!</p>
</body>
</html>  

现在,我们把页面重定与

http://localhost:55999/demo/demoviewaspdf

使用Rotativa在ASP.NET Core MVC中创建PDF

边距

除了普通的展示pdf,我们还可以进行操作,例如下载,打印。当然如果宽和高不太满意,你可以对视图进行设置,其中有一个类是对视图进行配置的,其定义如下,有四大配置值。

public class margins
    {
        [optionflag("-b")]
        public int? bottom;
        [optionflag("-l")]
        public int? left;
        [optionflag("-r")]
        public int? right;
        [optionflag("-t")]
        public int? top;

        public margins();
        public margins(int top, int right, int bottom, int left);

        public override string tostring();
    }

在控制器中直接new出它,然后直接return,和上面类似,现在你可以将html中的p标签添加一些内容,然后看一下效果。

[httpget]
        public iactionresult demoviewaspdf()
        {
            return new viewaspdf("demopagemarginspdf")
            {
                pagemargins = { left = 20, bottom = 20, right = 20, top = 20 },
            };
        }

 就这样,我们再次启动,可见已经有了外边距!

使用Rotativa在ASP.NET Core MVC中创建PDF

横向与纵向

它还给我们提供了横向还是竖向的pdf效果,如以下定义:

[httpget]
        public iactionresult demoviewaspdf(string orientation)
        {
            if (orientation == "portrait")
            {
                var demoviewportrait = new viewaspdf("demoviewaspdf")
                {
                    filename = "invoice.pdf",
                    pageorientation = rotativa.aspnetcore.options.orientation.portrait,
                };
                return demoviewportrait;
            }
            else
            {
                var demoviewlandscape = new viewaspdf("demoviewaspdf")
                {
                    filename = "invoice.pdf",
                    pageorientation = rotativa.aspnetcore.options.orientation.landscape,
                };
                return demoviewlandscape;
            }
        }

通过 http//localhost:60042/demo/demoorientationpdf?orientation=portrait 或者其它路由进行访问,你对比以下就可以看到效果。

设置pdf大小

 基本上都是a4,枚举里很多值,自己看~

[httpget]
        public iactionresult demoviewaspdf(string orientation)
        {
            return new viewaspdf("demopagesizepdf")
            {
                pagesize = rotativa.aspnetcore.options.size.a4
            };
        }

小案例

 创建一个模型,这是一个非常简单的模型,定义如下:

public class customer
    {
        public int customerid { get; set; }
        public string name { get; set; }
        public string address { get; set; }
        public string country { get; set; }
        public string city { get; set; }
        public string phoneno { get; set; }
    }

在控制器中new几个对象,然后返回pdf。

[httpget]
        public iactionresult demoviewaspdf()
        {
            list<customer> customerlist = new list<customer>() {
                 new customer { customerid = 1, address = "taj lands ends 1", city = "mumbai" , country ="india", name ="sai", phoneno ="9000000000"},
                 new customer { customerid = 2, address = "taj lands ends 2", city = "mumbai" , country ="india", name ="ram", phoneno ="9000000000"},
                 new customer { customerid = 3, address = "taj lands ends 3", city = "mumbai" , country ="india", name ="sainesh", phoneno ="9000000000"},
                 new customer { customerid = 4, address = "taj lands ends 4", city = "mumbai" , country ="india", name ="saineshwar", phoneno ="9000000000"},
                 new customer { customerid = 5, address = "taj lands ends 5", city = "mumbai" , country ="india", name ="saibags", phoneno ="9000000000"}
            };
            return new viewaspdf("demomodelpdf", customerlist);
        }

在视图中,我们只是迭代集合,渲染页面。

 

@model list<mvchtmltopdf.models.customer>
@{
    layout = null;
}

<!doctype html>
<html lang="en">
<head>
    <title>bootstrap example</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <div class="container">
        <h2>customer</h2>
        <p>customer details</p>
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>customerid</th>
                    <th>name</th>
                    <th>address</th>
                    <th>country</th>
                    <th>city</th>
                    <th>phoneno</th>
                </tr>
            </thead>
            <tbody>

                @foreach (var item in model)
                {
                    <tr>
                        <td>@item.customerid</td>
                        <td>@item.name</td>
                        <td>@item.address</td>
                        <td>@item.country</td>
                        <td>@item.city</td>
                        <td>@item.phoneno</td>
                    </tr>
                }

            </tbody>
        </table>
    </div>
</body>
</html> 

使用Rotativa在ASP.NET Core MVC中创建PDF